在以下几个方面是否有区别:
#if defined(_WIN32) || defined(_WIN64)
以及:
#ifdef _WINDOWS_
我知道,当有超过一个条件时,使用defined()
是必要的。
发布于 2022-09-13 16:10:20
是的,是有区别的。_WIN32
和_WIN64
令牌的定义(有条件)取决于所针对的平台。前者(_WIN32
)将定义为x86、x64、ARM和ARM-64体系结构;后者(_WIN64
)将仅为这两种64位架构定义。
但是,如果给定源文件包含"Windows.h“头文件,则始终定义_WINDOWS_
宏。它被用来(在标题中)作为一个‘警卫’,以防止其身体的多个包裹体。该标题的一个非常精简的版本是:
/* ...
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
宏是编译器预定义的(即不需要为它们的相关目标平台定义标头)。
为了增加混乱,MSVC在创建针对Windows的新项目时(这不是正式预定义的,而是项目属性中默认的每个项目的“预处理器定义”之一),默认情况下还添加了一个_WINDOWS
宏(注意后面没有下划线)。
https://stackoverflow.com/questions/73705992
复制相似问题