Emr*_*riş 5 c compiler-construction c-preprocessor
我一直在研究 GCC 编译指示类型及其操作。但我意识到pragmas可以用来直接编译命令。我遇到的困惑是 # 操作是预处理的一部分,例如
#if DEBUG
/* statement one */
#elif RELEASE
/* statement two */
#endif
Run Code Online (Sandbox Code Playgroud)
如果激活调试模式,编译器甚至不会编译和检测语句二中的错误,但是#pragma如何直接向编译器发出命令?
另外,如果它控制编译器,有没有办法在没有#pragmas的情况下做到这一点?因为预处理之后只剩下C代码了。
有没有办法在没有#pragmas的情况下做到这一点?
不,据我所知。
因为预处理之后只剩下C代码了。
事实证明,至少 GCC 和 Clang#pragma在预处理期间不会删除它,而是将其留给编译器来处理。它们似乎也替换_Pragma为#pragma.
您可以通过使用-E标志调用它们来输出预处理的源代码来查看它。
pragmas 可用于直接编译命令。我感到困惑的是 # 操作是预处理的一部分
是的,C++ 很奇怪。该标准将其称为“预处理器指令”,但没有定义它可以做什么或不能做什么。GCC 开发人员决定让它也影响编译器。
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |