1) Будут ли все символы 'char' интерпретироваться как широкие символы?
Нет. Но все TCHAR
s будут интерпретироваться как wchar_t
s
Подумайте, как winnt.h, вероятно, определит это:
#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef CHAR TCHAR;
#endif
Когда вы звоните SomeApi()
, он будет преобразован в SomeApiA(char *arg)
или SomeApiW(wchar_t *arg)
. (аргументы на самом деле будут TCHAR
, но вы поймете))
Таким образом, ваш исходный код будет «независимым» в том смысле, что он может быть скомпилирован в версию «ANSI» или Widechar. Чтобы это работало, вам нужно использовать TCHAR
вместо примитивных типов.
2) Если у меня есть простое выражение printf, то есть printf ("Hello World \ n"); без строк символов, могу ли я просто оставить это без использования _tprintf и _T ("...")? Если оператор printf содержит символьную строку, то я должен использовать _tprintf и _T ("..."), то есть _tprintf ("Hello% s \ n", name);
Я не знаю семью tprintf
, кроме как могу предположить, что они работают так же, как и определения, приведенные выше. То есть tprintf
принимает TCHAR
в качестве аргумента и зависит от параметра UNICODE
, либо обрабатывает их как char
с, либо wchar_t
с.
3) Если у меня есть текстовый файл (сохраненный в формате по умолчанию, то есть без изменения используемого набора символов по умолчанию), который я хочу прочитать в буфер, могу ли я по-прежнему использовать char вместо TCHAR? Особенно, если я читаю это символ за символом, то есть увеличивая указатель символа?
Какой символ, кодирующий содержимое файла, полностью зависит от него и не имеет ничего общего с TCHAR
. TCHAR
для имен файлов и таких, которые вы используете в вызовах Win32 API.