为什么UNICODE和_UNICODE?

Adr*_*ala 36 unicode visual-c++

我一直在看Visual Studio生成的命令行,对于我的一个项目,它定义了两个符号:_UNICODEUNICODE.现在,如果我理解这个相当旧的文档这个文档,那么这个_UNICODE符号是一个VC++的东西,它会导致某些标准函数wchar_t而不是char它们的接口.

UNICODE没有下划线意味着什么呢?

Rom*_* R. 49

Raymond Chen在此解释:TEXT vs. _TEXT vs. _T,UNICODE vs. _UNICODE:

没有下划线的普通版本会影响Windows头文件视为默认的字符集.因此,如果你定义UNICODE,那么GetWindowText将映射到GetWindowTextW而不是GetWindowTextA,例如.同样,TEXT宏将映射到L"..."而不是"...".

带有下划线的版本会影响C运行时头文件视为默认值的字符集.因此,如果你定义_UNICODE,那么_tcslen将映射到wcslen而不是strlen,例如.同样,_TEXT宏将映射到L"..."而不是"...".

查看Windows SDK,您会发现以下内容:

#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE
#endif
#endif
Run Code Online (Sandbox Code Playgroud)


Han*_*ant 14

编译器供应商必须在其头文件中使用下划线标识前缀,以防止它们与您的标识符冲突.因此<tchar.h>,编译器头文件使用_UNICODE.Windows SDK头文件是编译器不可知的,并且很古老,它使用UNICODE而没有下划线.你必须定义它们.


Ami*_*inM 12

简而言之,

UNICODE 由Windows标头使用,

_UNICODE 由C-runtime/MFC头使用.