预处理器输出

时间:2010-09-18 17:57:42

标签: gcc macros c-preprocessor

在转换为目标文件之前,如何查看 C 预处理器产生的输出?

我想看看MACRO定义对我的代码做了什么。

6 个答案:

答案 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...

action popup

最好将它分配给一个快捷方式,以便在首选项->键映射中更简单地重用:

enter image description here

大喊marcosbento

PS:TU 的意思是“翻译单元”(参见此处 LLVM translation unit