如何运行GCC预处理器来获取像#define这样的macros之后的代码?

有没有一个选项,GCC预处理器可以生成C源代码,并筛选出不相关的源代码?

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

GCC支持这个吗?

是。 使用-E选项:

 gcc -E foo.c 

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

如果你需要debugging一个没有达到预期的macros扩展, E是一个很好的select。 如果你只是想过滤出“不活动的代码”,但剩下的代码或多或less的原始forms,你可能想看看下面的堆栈溢出问题的答案:

  • 是否有一个C预处理器消除#ifdef块基于定义/未定义的值?

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