2010-10-14 53 views
2

是否有可能在執行時獲取C程序中使用的#define列表(包括編譯時間和源代碼中定義的)。 因爲我有一個項目有很多的C源文件。列出C程序中的所有#defines

是否有任何編譯時間選項來獲取?

+1

你能說你正在使用哪種編譯器嗎? – Doug 2010-10-14 10:42:14

+0

飛思卡爾Starcore編譯器 – 2010-10-14 10:46:00

回答

2

在GCC,你可能要執行的命令是

gcc -dM -E [your_source_files] 

我知道這是隱含在上面的答案,但也許有人需要(像我一樣)的快速配方。

+0

非常感謝你 – 2011-02-04 04:45:17

5

GNU cpp需要各種-d選項來輸出宏和定義數據。查看他們的手冊頁獲取更多詳細信息

+0

非常感謝你 – 2010-10-14 11:20:17

3

爲GCC,您可以使用下列之一:

-dCHARS煤焦是一個或多個以下字符的序列,而絕不能以空格開頭。其他字符由編譯器正確解釋,或者保留給未來的GCC版本,因此會被忽略。如果您指定行爲衝突的字符,則結果未定義。

M' Instead of the normal output, generate a list of #define'指令,用於執行預處理器期間定義的所有宏,包括預定義的宏。這爲您提供了一種查找預處理器版本中預定義內容的方法。假設你沒有文件foo.h,命令 touch foo.h; cpp -dM foo.h

將顯示所有預定義的宏。

如果使用不帶-E選項的-dM,則將-dM解釋爲-fdump-rtl-mach的同義詞。請參閱調試選項。

D' Like M「除了在兩個方面:它不包括預定義的宏,並輸出兩者#define' directives and the result of preprocessing. Both kinds of output go to the standard output file. N」 類似`d」,但僅發出的宏名稱,而不是他們的擴展。

I' Output #include'指令除了預處理的結果。

U' Like D'除了只輸出擴展的宏或在預處理指令中測試其定義的宏之外,輸出被延遲直到宏的使用或測試;和`#undef'指令也會被輸出到被測試的宏,但是當時沒有定義。

相關問題