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

Ric*_*Luo 25 gcc

是否有一个选项,GCC预处理器可以生成C源代码并过滤掉不相关的源代码?

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

GCC是否支持这一点?

Jes*_*erE 28

是.使用-E选项:

gcc -E foo.c
Run Code Online (Sandbox Code Playgroud)


Mic*_*urr 14

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

如果您需要调试不符合预期的宏扩展,那么这E是一个很好的方法.如果您只想过滤掉"非活动代码",但将剩余代码保留为或多或少的原始格式,您可能需要查看以下Stack Overflow问题的答案:


Chr*_*fer 5

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