2010-10-12 116 views
8

可能重复:
Running the GCC preprocessorGCC预处理器

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

例如,一个C文件有#define switch来定义许多不同的平台。我只在一个平台上使用,所以我希望预处理器能够过滤掉不相关的代码。 GCC支持这个吗?

+2

完全重复(看起来像相同的用户,今天早些时候):[gcc preprocessor](http://stackoverflow.com/questions/3916979/gcc-preprocessor) – 2010-10-12 17:43:54

+0

@Paul确实是同一个用户;在迈克尔清理之前,这个问题的原始版本是一字不变的,包括* Richard Luo * sig。 – meagar 2010-10-12 17:57:12

回答

2

是的 - 几乎可以肯定,您的编译器会在环境中提供某些默认定义,您可以使用该定义为不同系统打开和关闭代码。 __GNUC__对GCC来说是个不错的选择。例如:

#ifdef __GNUC__ 
#define SOME_VALUE 12 
#else 
#define SOME_VALUE 14 
#endif 

如果编译GCC该块,SOME_VALUE12,如果你用MSVC编译,例如,SOME_VALUE将是14的平台特定的定义的列表,请this question

18

使用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文件,它们也会被粘贴,所以我不确定这有多大的帮助。

+0

感谢您的回答。也许我的问题还不够清楚。但嘎嘎回答了我的问题。 – richard 2010-10-12 17:54:24

0

你大概可以使用:

gcc -CC -P -Uswitch -undef -nostdinc -fdirectives-only -dDI -E 

随着switch#define你知道会是不确定的。