【问题标题】:what actually sets the _WIN32 or _WIN64 preprocessor?_WIN32 或 _WIN64 预处理器的实际设置是什么?
【发布时间】:2019-12-30 13:01:33
【问题描述】:

在大多数源代码中实际设置 _WIN32 或 _WIN64 预处理器定义的内容
我发现的所有来源都是没有任何

#define _WIN32

也没有

#define _WIN64

但是由于源代码是由 GCC 编译的,预处理器会进入真实状态,就像定义已经被编写和定义一样,

问题也适用于其他操作系统关键字,因为它很可能具有相同的行为
非常感谢。

【问题讨论】:

    标签: c++ target preprocessor


    【解决方案1】:

    可以阅读here:

    _WIN64 编译目标为 64 位 ARM 时定义为 1 或 x64。否则,未定义。

    在任何地方都没有真正的#define。编译器只是根据其编译目标将其添加到其已知定义中。这一切都发生在编译器本身,而不是任何翻译单元(/C++ 文件)中。

    【讨论】:

      【解决方案2】:

      该标准规定了每个源文件的九个翻译阶段。编译器需要产生与按顺序执行这九个阶段相同的结果。

      第三阶段处理输入解析以产生预处理标记,第四阶段涉及预处理器的执行。预处理器执行后,没有预处理器指令等待编译的后续阶段处理。

      那么,从逻辑上讲,像_WIN32_WIN64 这样的编译器定义的宏的引入将在第三阶段(生成相关的预处理器令牌,然后由预处理器处理)或在预处理器本身(初始化预处理器设置数据结构,所以宏被神奇地定义了)。

      至于特定的编译器是如何做到的,你必须检查编译器的源代码。

      【讨论】:

        猜你喜欢
        • 2021-06-05
        • 2020-04-07
        • 2019-08-29
        • 2014-11-24
        • 1970-01-01
        • 1970-01-01
        • 2013-08-24
        • 2012-02-07
        • 2017-03-18
        相关资源
        最近更新 更多