【发布时间】:2010-11-17 15:13:42
【问题描述】:
我打开了 winnt.h 头文件,发现有这两行:
typedef wchar_t WCHAR;
和
typedef WCHAR TCHAR, *PTCHAR;
但在我的posts 之一中有评论说它们之间存在一些差异。那有什么区别呢?
【问题讨论】:
我打开了 winnt.h 头文件,发现有这两行:
typedef wchar_t WCHAR;
和
typedef WCHAR TCHAR, *PTCHAR;
但在我的posts 之一中有评论说它们之间存在一些差异。那有什么区别呢?
【问题讨论】:
如果你阅读整个标题,你会发现:
#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:
如果定义了 UNICODE,则为 WCHAR,否则为 CHAR。
WCHAR:
一个 16 位 Unicode 字符。有关详细信息,请参阅字体使用的字符集。
【讨论】:
从技术上讲,没有区别,因为您不能将两个不同的实体类型定义为一个实体。让我们看一个例子......
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':重新定义;不同的基本类型
因此,通过分析这些事物,只有同一类型才能一起定义。
【讨论】: