为什么UNICODE和_UNICODE?

时间:2011-10-31 11:23:35

标签: visual-c++ unicode

我一直在查看Visual Studio生成的命令行,对于我的一个项目,它定义了两个符号:_UNICODEUNICODE。现在,如果我理解了这个文档this rather old 文档,那么_UNICODE符号就是一个VC ++,会导致某些标准函数在其接口中使用wchar_t而不是char

但是没有下划线的UNICODE是什么意思?

3 个答案:

答案 0 :(得分:47)

Raymond Chen在此解释:TEXT vs. _TEXT vs. _T, and 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

答案 1 :(得分:14)

编译器供应商必须在其头文件中使用下划线标识前缀,以防止它们与您的标识符冲突。所以编译器头文件<tchar.h>使用_UNICODE。 Windows SDK头文件与编译器无关,而且很老,它使用UNICODE而没有下划线。你必须定义两者。

答案 2 :(得分:11)

简而言之,

Windows标头

使用

UNICODE

,而

_UNICODE由C-runtime / MFC头使用。