gpt4 book ai didi

c++ - _WINDOWS_ 和 _WIN32/_WIN64 宏的使用有区别吗?

转载 作者:行者123 更新时间:2023-12-01 22:53:37 26 4
gpt4 key购买 nike

有区别吗:

#if defined(_WIN32) || defined(_WIN64)

和:

#ifdef _WINDOWS_

我知道当条件超过 1 个时,有必要使用 defined()

最佳答案

是的, 有区别。 _WIN32_WIN64 标记是根据目标平台(有条件地)定义的。前者 (_WIN32) 将被定义为 x86、x64、ARM 和 ARM-64 架构;后者 (_WIN64) 将为两种 64 位架构定义。

但是,如果“Windows.h”头文件包含在给定的源文件中,_WINDOWS_ 宏将始终被定义。它(在该 header 中)用作“守卫”,以防止其主体被多次包含。该 header 的非常精简版是:

/* ...
Copyright (c) Microsoft Corporation. All rights reserved.
...
Master include file for Windows applications.

--*/

#ifndef _WINDOWS_
#define _WINDOWS_

// ...
// <body of Windows.h>
// ...


#endif /* _WINDOWS_ */

此外,当使用 MSVC 编译器(可能还有一些其他编译器)时,_WIN32_WIN64 宏由编译器预定义 (即,没有 header 需要被包含,以便为它们的相关目标平台定义它们)。


只是为了增加困惑,MSVC 还默认添加一个 _WINDOWS 宏(注意缺少尾随下划线),当创建针对 Windows 的新项目时(这不是正式预定义的,但是是项目属性中默认的每个项目“预处理器定义”之一。

关于c++ - _WINDOWS_ 和 _WIN32/_WIN64 宏的使用有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73705992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com