GCC预处理器

ric*_*ard 9 gcc c-preprocessor

可能重复:
运行GCC预处理器

是否有GCC选项使GCC预处理器生成C源代码但过滤掉不相关的源代码?

例如,C文件必须#define switch为许多不同的平台定义.我只是在一个平台上,所以我希望C预处理器过滤掉不相关的代码.GCC是否支持这一点?

Ben*_*ier 26

使用gcc -E仅运行预处理部分,例如给一个文件in.c

#if 0
0;
#endif

#if 1
1;
#endif
Run Code Online (Sandbox Code Playgroud)

赛跑

$ gcc -E in.c -o in.i
Run Code Online (Sandbox Code Playgroud)

产生一个文件 in.i

# 1 "in.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "in.cpp"





1;
Run Code Online (Sandbox Code Playgroud)

即被#if 0删除后面的部分.如果你有#include文件,他们也会被粘贴,所以我不确定这有多少帮助.


Chr*_*fer 5

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


Car*_*rum 2

是的 - 几乎可以肯定,您的编译器在环境中提供了某些默认定义,您可以使用它们来打开和关闭不同系统的代码。 __GNUC__对 GCC 来说是一件好事。例如:

#ifdef __GNUC__
#define SOME_VALUE 12
#else
#define SOME_VALUE 14
#endif
Run Code Online (Sandbox Code Playgroud)

例如,如果您使用 GCC 编译该块,SOME_VALUE则将为12,如果您使用 MSVC 编译,则将为 14。此问题SOME_VALUE中提供了平台特定定义的列表。