我一直在研究Visual Studio生成的命令行,对于我的一个项目,它定义了两个符号:_UNICODE和UNICODE。现在,如果我理解本文档this rather old 文档的内容,_UNICODE符号是一个VC++符号,它会导致某些标准函数在其接口中使用wchar_t而不是char。
但是没有下划线的UNICODE是什么意思呢?
发布于 2011-10-31 20:08:51
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发布于 2012-08-14 18:26:43
简而言之,
UNICODE由Windows使用,
鉴于
_UNICODE由C-runtime/MFC头使用。
发布于 2011-10-31 20:21:32
编译器供应商必须在其头文件中的标识符前面加上下划线,以防止它们与您的标识符发生冲突。因此,编译器头文件<tchar.h>使用_UNICODE。Windows SDK头文件是编译器不可知的,而且非常旧,它使用不带下划线的UNICODE。你必须对两者都下定义。
https://stackoverflow.com/questions/7953025
复制相似问题