В чем разница между TCHAR и WCHAR?

Я открыл файл заголовка winnt.h и нашел там две строки:

typedef wchar_t WCHAR;

и

typedef WCHAR TCHAR, *PTCHAR;

но был комментарий в одном из моих сообщений, что между ними существует некоторая разница. Тогда в чем разница?

Ответы

Ответ 1

Если вы читаете весь заголовок, вы найдете:

#ifdef _UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif

или слова на этот счет.

Возможно, MS в последнее время удалила узкий вариант.

Ответ 2

TCHAR может быть либо char, либо WCHAR на платформе. WCHAR всегда является 16-разрядным символом Unicode, wchar_t.

Ответ 3

http://msdn.microsoft.com/en-us/library/aa383751%28VS.85%29.aspx

TCHAR:

A WCHAR, если UNICODE определен, a CHAR в противном случае.

WCHAR:

16-разрядный символ Юникода. Дополнительные сведения см. В разделе Символьные наборы, используемые шрифтами.

Ответ 4

Технически говоря, нет никакой разницы, потому что вы не можете ввести два разных объекта в один. Посмотрим пример...

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': переопределение; различные базовые типы

Итак, анализируя эти вещи, только один тип может определяться вместе.