Ответ 1
Если вы читаете весь заголовок, вы найдете:
#ifdef _UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif
или слова на этот счет.
Возможно, MS в последнее время удалила узкий вариант.
Я открыл файл заголовка winnt.h и нашел там две строки:
typedef wchar_t WCHAR;
и
typedef WCHAR TCHAR, *PTCHAR;
но был комментарий в одном из моих сообщений, что между ними существует некоторая разница. Тогда в чем разница?
Если вы читаете весь заголовок, вы найдете:
#ifdef _UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif
или слова на этот счет.
Возможно, MS в последнее время удалила узкий вариант.
TCHAR
может быть либо char
, либо WCHAR
на платформе. WCHAR
всегда является 16-разрядным символом Unicode, wchar_t
.
http://msdn.microsoft.com/en-us/library/aa383751%28VS.85%29.aspx
TCHAR:
A WCHAR, если UNICODE определен, a CHAR в противном случае.
WCHAR:
16-разрядный символ Юникода. Дополнительные сведения см. В разделе Символьные наборы, используемые шрифтами.
Технически говоря, нет никакой разницы, потому что вы не можете ввести два разных объекта в один. Посмотрим пример...
typedef char a;
typedef char b;
typedef a b, c;
Это определение работает, но если изменение выше определения для этого
typedef char a;
typedef char * b;
typedef a b, c;
Ошибка 1 ошибка C2040: 'b': 'a' отличается в уровнях косвенности от 'char *'
Другой
typedef char a;
typedef int b;
typedef a b, c;
Ошибка 1 ошибка C2371: 'b': переопределение; различные базовые типы
Итак, анализируя эти вещи, только один тип может определяться вместе.