在扩展了#define之类的宏之后,如何运行GCC预处理器来获取代码?

在扩展了#define之类的宏之后,如何运行GCC预处理器来获取代码?,gcc,Gcc,GCC预处理器是否可以生成C源代码并过滤掉不相关的源代码 例如,一个.c文件有一个#define开关来定义许多不同的平台。我只对一个平台感兴趣,我希望C预处理器过滤掉不相关的代码 GCC是否支持这一点?是。使用-E选项: gcc -E foo.c 虽然-E选项将执行所有预处理,但它也会产生一些非常“原始”的输出,这些输出可能不是您想要的(取决于您想要的) 如果您需要调试一个宏扩展,但它没有达到预期效果,E是一个很好的方法。如果您只是想过滤掉“非活动代码”,但将剩下的代码保留为或多或少的原始形式

GCC预处理器是否可以生成C源代码并过滤掉不相关的源代码

例如,一个
.c
文件有一个
#define
开关来定义许多不同的平台。我只对一个平台感兴趣,我希望C预处理器过滤掉不相关的代码


GCC是否支持这一点?

是。使用
-E
选项:

gcc -E foo.c

虽然
-E
选项将执行所有预处理,但它也会产生一些非常“原始”的输出,这些输出可能不是您想要的(取决于您想要的)

如果您需要调试一个宏扩展,但它没有达到预期效果,
E
是一个很好的方法。如果您只是想过滤掉“非活动代码”,但将剩下的代码保留为或多或少的原始形式,您可能需要查看以下堆栈溢出问题的答案:


听起来您想要的是GCC预处理器,而不是GCC预处理器。

请注意,在运行预处理器后,您还将在文件顶部包含所有的
#include
s(因此请准备大量滚动)。此问题在上有一个副本,其中包含其他答案和讨论。Visual studio: