回答
不,它評估爲無。從字面上看,符號被替換爲無。
但是,一旦您有#define FOO
,預處理器條件#ifdef FOO
現在將成立。
還請注意,在gcc
和其他可能的編譯器中,如果您在命令行上使用-DFOO
定義宏,則默認情況下該值的計算結果爲1
。
由於OP更新了他的問題以引用函數式的宏,我們來考慮一個小例子。
#define FOO
#define BAR()
FOO
BAR
BAR()
這不是一個有效的C
程序,但預處理器並不關心。 如果我編譯這個gcc -E Input.c
,我得到一個空白,其次是BAR
其次是空白。這是因爲第一個和第三個表達式評估爲虛無,中間表達式沒有擴展,因爲後面沒有()
。
最後一段是編譯器特有的; gcc的行爲方式,但它不是由語言指定。對於gcc和類似的編譯器,你可以通過在命令行上傳遞'-DFOO ='來完成'#define FOO'的等價操作。 –
@凱特湯普森,謝謝你的告誡。我會把它折成答案。 – merlin2011
請注意,POSIX要求['c99'](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/c99.html)提供'-D'行爲:'-D name [= value]'_Define name就像用C語言的'#define'指令一樣。如果未給出'= value',則應使用值1。 '-D'選項的優先級低於'-U'選項。也就是說,如果在'-U'和'-D'選項中都使用名稱,則不管選項的順序如何,名稱都應該是不確定的。編譯器可以提供其他實現定義的名稱。實現應支持至少2048字節的'-D'定義和256個名稱._ –
- 1. 語言中使用#define以C語言創建
- 2. 語言中使用#define在.PCH
- 3. 語言中使用#define NDEBUG給我在C++中的錯誤
- 4. 在C語言編程語言中更改菜單中的#define值
- 5. 我們可以用c語言創建一個沒有定義的宏#define
- 6. C語言:如何解釋這個#define?
- 7. '#define xxx'(沒有任何價值!)與'#define xxx yyy'(帶值)形成對比嗎?
- 8. FORTRAN等價於C++語言
- 9. Javascript語言,HTML價值
- 10. 最大數組大小語言中使用#define
- 11. 在z3的輸入語言中使用define-fun
- 12. 使用#define in c
- 13. String.Starts沒有使用亞洲語言?
- 14. 如何使用C語言中的單元測試語言C?
- 15. 使用C#在asp.net中的Viewstate沒有獲得價值?
- 16. 用c語言
- 17. 使用autoconf檢查C#define的值
- 18. 如何使用#define語句
- 19. C語言:使用鏈表
- 20. Rails沒有找到價值使用!=
- 21. 在「if」語句中使用#define
- 22. 在c語言中使用ncurses
- 23. 如何在C語言中使用VTK?
- 24. 在C語言中使用strtok
- 25. 沒有fopen的讀文件()(C語言)
- 26. sqlite3(語言C):沒有這樣的列
- 27. 使用類型的#define值
- 28. 使用define的最大值
- 29. Turbo C++默認使用C語言?
- 30. C#在宏名稱中使用#define語句
究竟是什麼阻止了你自己運行預處理器,看看會發生什麼? –
請注意,您已經定義了類似函數的宏,這意味着除非後面跟着一個帶括號的參數列表,否則不會展開COMMAND_SPI。 –
@KerrekSB @KerrekSB在一個測試用例中,一個系統的行爲並不能保證所有系統的行爲相同(或者甚至當在同一系統上重新運行時,相同的代碼的行爲相同) –