2012-03-24 3 views
5

Sto provando a scrivere un codice C che sia portatile solo fino a quando l'utente ha gcc e ha glib installato.Qual è la differenza tra glib gunichar e wchar_t e quale è meglio per le soluzioni multipiattaforma?

Da tutte le mie ricerche, ho trovato che con gcc, un wchar_t è sempre definito come 4 byte, e con un glibgunichar è anche 4 byte.

Quello che non ho capito è se come un gunichar, un wchar_t è codificato come UCS4 pure. È questo il caso? In tal caso, I dovrebbe in grado di trasmettere semplicemente un gunichar* a wchar_t* e utilizzare le funzioni stdc wcs*, giusto?

risposta

8

Se si utilizza GLib, non utilizzare wchar_t. Usa il suo supporto unicode, è un sacco migliore del supporto della libreria standard C.

wchar_t è 4 byte su Linux e Mac OS (e alcuni altri), non su Windows (sono 2 byte lì) e altri. Il codice portatile significa evitare lo wchar_t come la peste.

+0

hmm. Grazie. Ho appena notato che quasi tutte le funzioni unicode di glib operano su stringhe utf8, e da quello che ho capito (potrebbe essere sbagliato) l'iterazione attraverso un char array codificato multi-byte è inefficiente in quanto è necessario utilizzare un iteratore per assicurarsi di ottenere un full char e semplicemente non un byte (non può semplicemente io ++ farti strada attraverso l'array). Ho appena ricontrollato i documenti e g_utf8_next_char() è implementato come macro, quindi suppongo che non sia più un problema per me. grazie ancora. – ckot

+1

@skot decente supporto Unicode è costoso, in qualsiasi modo lo metti. Preoccupati delle prestazioni una volta che il tuo programma/libreria funziona, non prima. – rubenvb

+1

buon punto. le cose sembrano funzionare bene finora, quindi attraverserò quel ponte se/quando ne ho bisogno. grazie ancora. – ckot

Problemi correlati