我已经打开winnt. h头文件,发现有这两行:
typedef wchar_t WCHAR;
以及
typedef WCHAR TCHAR, *PTCHAR;
但是在我的一个帖子里有评论说他们之间有一些区别。那么区别是什么呢?
e4eetjau1#
如果您阅读整个标题,您会发现:
#ifdef _UNICODE typedef WCHAR TCHAR; #else typedef char TCHAR; #endif
或者类似的话。也许微软已经取消了最近的狭隘选择。
nkcskrwz2#
TCHAR可以是char或WCHAR,具体取决于平台。WCHAR始终是16位Unicode字符wchar_t。
TCHAR
char
WCHAR
wchar_t
p1iqtdky3#
http://msdn.microsoft.com/en-us/library/aa383751%28VS.85%29.aspx什么?如果定义了UNICODE,则为WCHAR,否则为CHAR。WCHAR:16位Unicode字符。有关详细信息,请参阅字体使用的字符集。
fkvaft9z4#
从技术上讲没有区别,因为你不能把两个不同的实体定义为一个实体。让我们看一个例子...
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”:重新定义;不同的基本类型
所以通过分析这些东西,只有相同的类型才能定义在一起。
qv7cva1a5#
TCHAR是可移植类型,对于ANSI类型项目是char,对于UNICODE项目是WCHAR(16位Unicode字符)。使用TCHAR和TCHAR */LPSTR,您可以创建可移植项目,该项目可以轻松地重新编译为ANSI和UNICODE版本。但在Windows 98/ME过时且很少使用后,就不需要创建非Unicode可执行文件了。
TCHAR *
LPSTR
5条答案
按热度按时间e4eetjau1#
如果您阅读整个标题,您会发现:
或者类似的话。
也许微软已经取消了最近的狭隘选择。
nkcskrwz2#
TCHAR
可以是char
或WCHAR
,具体取决于平台。WCHAR
始终是16位Unicode字符wchar_t
。p1iqtdky3#
http://msdn.microsoft.com/en-us/library/aa383751%28VS.85%29.aspx
什么?
如果定义了UNICODE,则为WCHAR,否则为CHAR。
WCHAR:
16位Unicode字符。有关详细信息,请参阅字体使用的字符集。
fkvaft9z4#
从技术上讲没有区别,因为你不能把两个不同的实体定义为一个实体。让我们看一个例子...
此定义有效,但如果将上述定义更改为
*错误1错误C2040:“B”:“a”与“char "的间接级别不同
另一个
错误1错误C2371:“B”:重新定义;不同的基本类型
所以通过分析这些东西,只有相同的类型才能定义在一起。
qv7cva1a5#
TCHAR
是可移植类型,对于ANSI类型项目是char
,对于UNICODE项目是WCHAR
(16位Unicode字符)。使用TCHAR
和TCHAR *
/LPSTR
,您可以创建可移植项目,该项目可以轻松地重新编译为ANSI和UNICODE版本。但在Windows 98/ME过时且很少使用后,就不需要创建非Unicode可执行文件了。