2013-03-19 16 views
23

Cosa rappresenta la "T" in una stringa. . Per esempio _T ("Ciao") Ho visto questo in progetti in cui il supporto unicode è needed.What in realtà dice al processoreCosa significa _T in un CString

risposta

20

_T sta per "testo". Trasformerà il letterale in un letterale di caratteri Unicode se e solo se stai compilando i tuoi sorgenti con il supporto Unicode. Vedi http://msdn.microsoft.com/en-us/library/c426s321.aspx.

+4

Tecnicamente, '_T()' viene utilizzato solo con la libreria di runtime C, da utilizzare con il tipo di dati '_TCHAR'. L'equivalente di Win32 è la macro 'TEXT()' da usare con il tipo di dati 'TCHAR'. Entrambi si associano a 'char' o' wchar_t' a seconda che siano stati definiti '_UNICODE' e' UNICODE' durante la compilazione, rispettivamente. Entrambi sono generalmente definiti/non definiti insieme, quindi molte persone tendono a scambiarli e le cose di solito funzionano. Ma sono * logicamente * separati e * dovrebbero * essere trattati di conseguenza. Usa '_TCHAR' e' _T() 'con le funzioni C. Usa 'TCHAR' e' TEXT() 'con l'API Win32. –

+0

@RemyLebeau: Ora ecco la domanda complicata: quale usare con il tipo 'CString' di MFC/ATL? 'CString' è implementato sia in termini di CRT che dell'API di Windows. – IInspectable

+0

Per la documentazione: "*** CString è basato sul tipo di dati' TCHAR' **. * ", Quindi usa' TEXT() '. –

10

Da MSDN:

Utilizzare la _T macro per codificare le stringhe letterali genericamente, quindi vengono compilati come stringhe Unicode in Unicode o come stringhe ANSI (incluso MBCS) senza Unicode

8

In realtà è utilizzato per progetti in cui è richiesto il supporto ANSI Unicode e. Indica al compilatore di compilare la stringa letterale come Unicode o ANSI a seconda del valore di un precompilatore definito.

Perché si vorrebbe fare questo è un'altra questione. Se si desidera supportare Unicode da solo, è sufficiente scrivere Unicode, in questo caso L"Hello". La macro _T() è stata aggiunta quando è necessario supportare Windows NT e versioni successive (che supportano Unicode) e Windows 9x/ME (che non lo fanno). In questi giorni qualsiasi codice che utilizza queste macro è obsoleto, poiché tutte le moderne versioni di Windows sono basate su Unicode.