Fondamentalmente, TCHAR
e le macro associate ( _T
/ TEXT
) sono davvero necessarie solo se hai come target sia ANSI che Unicode e, come il 99,9% degli sviluppatori, la possibilità che qualcuno possa stare usando Windows 95, 98 o Me non è davvero una mia preoccupazione. Io uso WCHAR
, LP(C)WSTR
, ecc. Nelle mie applicazioni.
Se utilizzo esplicitamente questi tipi, dovrei usare anche esplicitamente le funzioni associate?
Ad esempio:
WCHAR wString[100];
StringCchCopyW(wString, 100, L"Hello World");
MessageBoxW(0, wString, L"", MB_OK | MB_ICONINFORMATION);
Al contrario di:
WCHAR wString[100];
StringCchCopy(wString, 100, _T("Hello World"));
MessageBox(0, wString, _T(""), MB_OK | MB_ICONINFORMATION);
Non è molto probabile che un collega entri nel progetto e cambi l'impostazione del set di caratteri in "Usa set di caratteri Multi-Byte", e mentre il codice precedente è più esplicito in quello che sto facendo, quest'ultimo usa il nome "noto" della funzione; sono gli stessi nomi che ci si aspetta di vedere nella documentazione MSDN, e anche verbalmente, mi troverei a dire "string see-see-ech copy" piuttosto che "string see-see-ech copy double-you", anche se questa è la funzione che sto esplicitamente usando nel mio codice.