2012-03-24 23 views
5

Estoy tratando de escribir un código C que es portátil solo si el usuario tiene gcc, y tiene glib instalado.¿Cuál es la diferencia entre glib gunichar y wchar_t y cuál es mejor para las soluciones multiplataforma?

De toda mi investigación, he encontrado que con gcc, un wchar_t siempre se define como 4 bytes, y con un glibgunichar es también 4 bytes.

Lo que no tengo descubierto la es, si como un gunichar, un wchar_t se codifica como UCS4 también. ¿Es este el caso? Si es así, I debería ser capaz de simplemente emitir un gunichar* a un wchar_t* y utilizar las funciones stdc wcs*, ¿verdad?

Respuesta

8

Si usa GLib, no use wchar_t. Use su soporte Unicode, es mucho mejor que el soporte de la biblioteca estándar C.

wchar_t tiene 4 bytes en Linux y Mac OS (y algunos otros), no en Windows (hay 2 bytes allí) y algunos otros. El código portátil significa evitar wchar_t como la peste.

+0

hmm. Gracias. Me acabo de dar cuenta de que casi todas las funciones glib Unicode operan en cadenas utf8, y por lo que entiendo (podría estar mal) iterar a través de una matriz de caracteres codificados de múltiples bytes es ineficiente ya que necesita usar un iterador para asegurarse de obtener un char completo y simplemente no un byte (no puedo simplemente ir + a través de la matriz). Acabo de volver a verificar los documentos y g_utf8_next_char() se implementa como una macro, así que supongo que ya no es un problema para mí. gracias de nuevo. – ckot

+1

El soporte de @skot decente unicode es costoso, en cualquier forma que lo pidas. Preocuparse por el rendimiento una vez que su programa/biblioteca funciona, no antes. – rubenvb

+1

buen punto. las cosas parecen estar funcionando bien hasta el momento, así que cruzaré ese puente si es necesario. gracias de nuevo. – ckot

Cuestiones relacionadas