是否有GCC选项使GCC预处理器生成Ç源代码,但是过滤掉不相关的源代码?
例如,一个C文件有#define switch
来定义许多不同的平台。我只在一个平台上使用,所以我希望预处理器能够过滤掉不相关的代码。 GCC支持这个吗?
是否有GCC选项使GCC预处理器生成Ç源代码,但是过滤掉不相关的源代码?
例如,一个C文件有#define switch
来定义许多不同的平台。我只在一个平台上使用,所以我希望预处理器能够过滤掉不相关的代码。 GCC支持这个吗?
是的 - 几乎可以肯定,您的编译器会在环境中提供某些默认定义,您可以使用该定义为不同系统打开和关闭代码。 __GNUC__
对GCC来说是个不错的选择。例如:
#ifdef __GNUC__
#define SOME_VALUE 12
#else
#define SOME_VALUE 14
#endif
如果编译GCC该块,SOME_VALUE
将12
,如果你用MSVC编译,例如,SOME_VALUE
将是14的平台特定的定义的列表,请this question。
使用gcc -E
仅运行预处理器部分,例如,给文件in.c
#if 0
0;
#endif
#if 1
1;
#endif
运行
$ gcc -E in.c -o in.i
产生一个文件in.i
# 1 "in.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "in.cpp"
1;
即#if 0
后面的部分得到了清除。如果你有#include
'd文件,它们也会被粘贴,所以我不确定这有多大的帮助。
感谢您的回答。也许我的问题还不够清楚。但嘎嘎回答了我的问题。 – richard 2010-10-12 17:54:24
这听起来像你实际上想要unifdef,而不是GCC预处理器。
你大概可以使用:
gcc -CC -P -Uswitch -undef -nostdinc -fdirectives-only -dDI -E
随着switch
的#define
你知道会是不确定的。
完全重复(看起来像相同的用户,今天早些时候):[gcc preprocessor](http://stackoverflow.com/questions/3916979/gcc-preprocessor) – 2010-10-12 17:43:54
@Paul确实是同一个用户;在迈克尔清理之前,这个问题的原始版本是一字不变的,包括* Richard Luo * sig。 – meagar 2010-10-12 17:57:12