2010-10-12 202 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你知道會是不確定的。