header 在 C++ 中是什么意思?

What does this header mean in c++?

#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif

这是 codeblocks 上默认 win32 c++ 应用程序的header

它确保 UNICODE_UNICODE 都被定义,如果其中一个是。

它确保如果定义了 UNICODE 或 _UNICODE 预处理器符号,则同时定义了 UNICODE 和 _UNICODE。

它本身什么都不做。

我们可以假设头文件中的某些位置包含不同版本的代码,具体取决于是否定义了 UNICODE。最有可能定义使用 Unicode 字符串或 ASCII 的函数。

因此,如果程序员想使用 Unicode 字符串,他会定义 UNICODE 和 link 标准库的 Unicode 版本,否则他会保留 UNICODE 未定义和 link ASCII版本。

但为什么是 UNICODE 和 _UNICODE?我们可以假设,在编译器供应商发布使用 UNICODE 的版本后的某个时候,有人认为让供应商在全局命名空间中设置预编译器符号是个坏主意。

所以供应商改为使用 _UNICODE。但是因为他们有一些未知数量的客户已经拥有使用 UNICODE 的代码,并且他们不想破坏现有代码,所以他们采用了这个小技巧 - 如果定义了其中一个,则同时定义两者。

预计他们会在某个时候停止支持 UNICODE,而只支持 _UNICODE。

但我猜这永远不会发生。

molbdnilo 的扩展,

简而言之,

UNICODE is used by Windows headers ,

_UNICODE is used by C-runtime/MFC headers .

C-runtime 是:

The C runtime Library (CRT) is the part of the C++ Standard Library that incorporates the ISO C standard library.for more knowledge

MFC headers:

The Microsoft Foundation Class (MFC) Library provides an object-oriented wrapper over much of the Win32 and COM APIs. Although it can be used to create very simple desktop applications, it is most useful when you need to develop more complex user interfaces with multiple controls