|
1
18
使用-E:
上面的内部代码是gcc的行标记,当您阅读输出时,这些代码有点让人困惑。
-E Stop after the preprocessing stage; do not run the compiler proper.
The output is in the form of preprocessed source code, which is sent to the
standard output.
Input files which don't require preprocessing are ignored.
|
|
|
2
5
I know a solution to that . 用已经定义为非法C++代码的符号编译文件(链接到使用@)。所以,对于GCC,您可以编写
当它扩展时,肯定会导致语法错误,编译器应该告诉您语法错误所在的文件,这将非常有用。 如果使用Raymond Chen建议的技巧,编译器 也许 告诉您“冲突”的定义来自何处,以及 给你一份清单,说明它是如何被收录的。但这不能保证。因为我不使用宏(我更喜欢const和enum),所以我不能说GCC是否是这方面更智能的编译器之一。我不相信C或C++标准会对此表示任何意见,除了预处理器运行后,你会丢失各种有用的信息。 |
|
3
2
|
|
|
4
1
对于“to what it will expand”,我使用gcc中的-E开关,它提供预处理的输出。但是没有回溯哪个宏来自哪里(或者是否有宏)。 您可能使用的另一个选项是-g3,这将添加有关宏的调试信息,即,您稍后可以在调试器中看到每个宏的定义。 |
|
|
5
1
|
|
|
Timo · 如果宏变量后跟构成有效标识符的字符,则不会展开宏变量 8 年前 |
|
|
user3623498 · 在#if中更改变量时出现问题 8 年前 |
|
|
einpoklum · 来自#cmakedefine替换的意外结果 8 年前 |
|
|
Joseph Franciscus · C中预处理器方法的别名++ 8 年前 |
|
|
stoper · 防止同一宏在多个转换单元中具有不同的定义 8 年前 |
|
|
СеÑгей · MinGW中预处理器g++的奇怪行为 8 年前 |