至少一些Ç預處理器讓你stringize宏的價值,而不是它的名稱,將其通過一個函數宏到另一stringizes它:雙串化技巧究竟如何工作?
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
使用案例here。
這並不工作,至少在GCC和鏘(均與-std=c99
),但我不知道怎麼它工作在C-標準的條款。
此行爲是否由C99保證?
如果是這樣,C99如何保證它?
如果不是,行爲從C定義到GCC定義的哪一點?
如果你說「至少有一些」,這是否意味着你看到了一個它不工作的地方?我願意向供應商寫一份錯誤報告。 – Jens 2011-05-20 21:04:10
@Jens:不;我沒有。我使用過的每個編譯器(即GCC和Clang)都會實現此行爲。 – 2011-05-21 03:10:33