预处理器输出
Posted
技术标签:
【中文标题】预处理器输出【英文标题】:Preprocessor output 【发布时间】:2011-04-14 03:46:40 【问题描述】:如何查看 C 预处理器在转换为目标文件之前生成的输出?
我想看看宏定义对我的代码做了什么。
【问题讨论】:
【参考方案1】:gcc -E file.c
或
g++ -E file.cpp
将为您执行此操作。 -E 开关强制编译器在预处理阶段结束后停止,将目前得到的所有内容输出到标准输出。
注意:当然你必须有一些#include 指令。包含的文件也经过预处理,因此您可能会获得大量输出。
对于 Visual C++,开关是 /E,它将预处理器输出吐到屏幕上。
【讨论】:
gcc -E -nostdinc
将绕过标准的#include 文件
如果您正在处理的文件没有标准 c 扩展名,您可能还需要指定 -x c
您可能需要指定-I
和-D
开关。
-P
标志将禁止生成线标记。【参考方案2】:
您也可以直接调用 C 预处理器。
cpp infile outfile
查看man cpp
了解更多信息。
【讨论】:
不错!我更喜欢这个而不是cc -E
。另外,我也使用-P
禁用线市场(也适用于cc
)。【参考方案3】:
对于 GCC,
gcc -E -dM file.c
或
g++ -E -dM file.cpp
应该做的工作。 -dM,作为 GNU 预处理器手册puts it,应该为在预处理器执行期间定义的所有宏生成一个“#define”指令列表,包括预定义的宏。
【讨论】:
【参考方案4】:这取决于您使用的编译器。
使用 GCC,您可以在命令行上指定 -E
标志,让编译器生成预处理器输出。
【讨论】:
【参考方案5】:您可以查看我在此处描述的脚本:
http://mosermichael.github.io/cstuff/all/projects/2011/09/16/preprocessor.html
它将预处理器输出格式化为(希望)可读的 html 文档:由于预处理器而不同的行在文件中被标记。
【讨论】:
【参考方案6】:如果使用 Jetbrains 的 CLion,您可以使用操作“clangd: Preprocess current TU”
所以点击shift
shift
并开始输入clangd...
最好将其分配给快捷方式,以便在首选项中更简单地重用->键盘映射:
大声告诉marcosbento
PS:TU 的意思是“翻译单元”(见此处LLVM translation unit)
【讨论】:
以上是关于预处理器输出的主要内容,如果未能解决你的问题,请参考以下文章
scikit learn Pipeline中的后处理分类器输出