你能用這樣一個宏嗎?C?C預處理器宏定義宏
#define SUPERMACRO(X,Y) #define X Y
then
SUPERMACRO(A,B) expands to #define A B
我有一種感覺,不是因爲預處理器只有一次通過。
官方gcc只。請不要使用第三方工具。
你能用這樣一個宏嗎?C?C預處理器宏定義宏
#define SUPERMACRO(X,Y) #define X Y
then
SUPERMACRO(A,B) expands to #define A B
我有一種感覺,不是因爲預處理器只有一次通過。
官方gcc只。請不要使用第三方工具。
宏無法擴展爲預處理指令。從C99 6.10.3.4/3「重新掃描和再替換」:
所得完全宏取代預處理標記序列不被處理,即使它類似於一個預處理指令,
對不起,你不能。您可以在宏中調用其他宏,但不能定義新宏。
號操作順序是這樣的:所有預處理器指令在任何宏擴展完成之前都被識別;因此,如果一個宏擴展成看起來像預處理器指令的東西,它將不會被識別,但會被解釋爲(錯誤的)C源文本。
您不能在其他宏中定義宏,但可以從宏調用宏,這可以得到基本相同的結果。
#define B(x) do {printf("%d", (x)) }while(0)
#define A(x) B(x)
因此,A(y)
擴大到do {printf("%d", (y)) }while(0)
你可以嘗試只用預處理選項運行事情的經過,然後用處理後的文件進行編譯。
你可以做到這一點,但: 的#define SUPERMACRO(X,Y)定義X Y
然後你可以使用你的編輯宏擴展功能,並粘貼缺少#。
甚至更好:使用不同的更強大的字符串處理語言作爲預處理器。
有一種技術使用#include而不是#define來產生相似的結果;請參閱我對此類似問題的回答:macro definition containing #include directive
如果您執行了預處理器的2次通過,那麼該怎麼辦? – pm100 2010-03-11 23:39:28
語法無效。 #在宏中是一種保留字符。 #必須跟一個宏參數纔有效。這將'串化'參數。 – 2010-03-12 00:31:18