首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >_WINDOWS_和_WIN32 / _WIN64宏的使用有什么区别吗?

_WINDOWS_和_WIN32 / _WIN64宏的使用有什么区别吗?
EN

Stack Overflow用户
提问于 2022-09-13 15:57:17
回答 1查看 83关注 0票数 2

在以下几个方面是否有区别:

代码语言:javascript
运行
复制
#if defined(_WIN32) || defined(_WIN64)

以及:

代码语言:javascript
运行
复制
#ifdef _WINDOWS_

我知道,当有超过一个条件时,使用defined()是必要的。

EN

回答 1

Stack Overflow用户

发布于 2022-09-13 16:10:20

是的,是有区别的。_WIN32_WIN64令牌的定义(有条件)取决于所针对的平台。前者(_WIN32)将定义为x86、x64、ARM和ARM-64体系结构;后者(_WIN64)将仅为这两种64位架构定义。

但是,如果给定源文件包含"Windows.h“头文件,则始终定义_WINDOWS_宏。它被用来(在标题中)作为一个‘警卫’,以防止其身体的多个包裹体。该标题的一个非常精简的版本是:

代码语言:javascript
运行
复制
/* ...
    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宏(注意后面没有下划线)。

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

https://stackoverflow.com/questions/73705992

复制
相关文章

相似问题

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