首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么同时使用UNICODE和_UNICODE?

为什么同时使用UNICODE和_UNICODE?
EN

Stack Overflow用户
提问于 2011-10-31 19:23:35
回答 3查看 27.6K关注 0票数 50

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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,您会发现如下所示:

代码语言:javascript
复制
#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE
#endif
#endif
票数 66
EN

Stack Overflow用户

发布于 2012-08-14 18:26:43

简而言之,

UNICODE由Windows使用,

鉴于

_UNICODE由C-runtime/MFC头使用。

票数 29
EN

Stack Overflow用户

发布于 2011-10-31 20:21:32

编译器供应商必须在其头文件中的标识符前面加上下划线,以防止它们与您的标识符发生冲突。因此,编译器头文件<tchar.h>使用_UNICODE。Windows SDK头文件是编译器不可知的,而且非常旧,它使用不带下划线的UNICODE。你必须对两者都下定义。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7953025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档