是否有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