gpt4 book ai didi

c - 为什么#pragma 被视为预处理器指令?

转载 作者:行者123 更新时间:2023-12-03 13:52:39 24 4
gpt4 key购买 nike

我知道它以 # 开头,它遵循 preprocessing directives format .但是预处理器真的关心它吗? #pragma pack , #pragma once ,以及我知道的所有其他指令,都是由编译器处理的。评论在 this question甚至声明 #pragma指令在预处理阶段继续存在。
所以我的问题是:

  • #pragma用于编译器,为什么它被视为预处理指令?难道仅仅是因为它以#开头吗? ?
  • 预处理器真的对 #pragma 做了些什么吗? ?
  • 最佳答案

    Why is #pragma considered a preprocessor directive?


    因为 C 标准是这么说的。它在预处理指令一章中指定,C17 6.10.6。除此之外,该标准故意非常含糊 #pragma应该做,因为整个目的是做一些特定于编译器的事情。或者如果编译指示不被识别 - 忽略它。
    没有指定某个编译器如何在内部处理 pragma 的内容。
    一些编译指示显然需要进行预处理,特别是启用/禁用某些编译器行为的那种,如 #pragma warning ...等等。其中很多必须在预处理期间进行评估,否则编译器将不知道如何编译代码。

    Does preprocessor really do something with #pragma?


    是的,它在翻译阶段 4 中对其进行评估:“执行预处理指令,扩展宏调用,并执行 _Pragma 一元运算符表达式。”
    请注意,将预处理器与编译器分开主要是一种理论模型。实际上,预处理器和编译器通常彼此紧密集成。

    关于c - 为什么#pragma 被视为预处理器指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63773738/

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