在转换为目标文件之前,如何查看 C 预处理器产生的输出?
我想看看MACRO定义对我的代码做了什么。
答案 0 :(得分:52)
gcc -E file.c
或
g++ -E file.cpp
会为你做这件事。 -E开关强制编译器在预处理阶段之后停止,将此时所有的内容吐出到标准输出。
注意:当然你必须有一些#include指令。包含的文件也会得到预处理,因此您可能会获得大量输出。
对于Visual C ++,开关是/ E,它将预处理器输出吐出到屏幕。
答案 1 :(得分:7)
您也可以直接调用C预处理器。
cpp infile outfile
查看man cpp
了解详情。
答案 2 :(得分:5)
对于GCC,
gcc -E -dM file.c
或
g++ -E -dM file.cpp
应该做的工作。 -dM,作为GNU预处理器手册puts it,应该为执行预处理器期间定义的所有宏生成一个'#define'指令列表,包括预定义的宏。
答案 3 :(得分:3)
这取决于您使用的编译器
使用GCC,您可以在命令行中指定-E
标志,以便让编译器生成预处理器输出。
答案 4 :(得分:0)
您可以查看我在此处描述的脚本:
http://mosermichael.github.io/cstuff/all/projects/2011/09/16/preprocessor.html
它将预处理器输出格式化为(希望)可读的html文档:由于预处理器而不同的行标记在文件中。
答案 5 :(得分:-1)
如果使用 Jetbrains 的 CLion,您可以使用操作“clangd:预处理当前 TU”
所以点击 shift
shift
并开始输入 clangd...
最好将它分配给一个快捷方式,以便在首选项->键映射中更简单地重用:
PS:TU 的意思是“翻译单元”(参见此处 LLVM translation unit)