use*_*216 6 c preprocessor pragma
我知道它以 开头#,并且遵循预处理指令格式。但是预处理器真的关心它吗?的#pragma pack,#pragma once和其他所有的指令,我知道,都是由编译器进行。这个问题中的评论甚至指出#pragma指令在预处理阶段仍然存在。所以我的问题是:
#pragma是编译器,为什么它被认为是一个预处理指令?仅仅是因为它以 开头#吗?#pragma?为什么#pragma 被视为预处理器指令?
因为 C 标准是这么说的。它在预处理指令一章中指定,C17 6.10.6。除此之外,该标准对应该做什么故意非常模糊#pragma,因为整个目的是做一些特定于编译器的事情。或者如果编译指示不被识别 - 忽略它。
没有指定某个编译器如何在内部处理 pragma 的内容。
一些编译指示显然需要进行预处理,特别是启用/禁用某些编译器行为的类型,如#pragma warning ...等。其中很多必须在预处理期间进行评估,否则编译器将不知道如何编译代码。
预处理器真的用#pragma 做些什么吗?
是的,它在翻译阶段 4 中对其进行评估:“执行预处理指令,扩展宏调用,并执行 _Pragma 一元运算符表达式。”
请注意,将预处理器与编译器分开主要是一种理论模型。实际上,预处理器和编译器通常彼此紧密集成。
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |