我碰到一個更加一段代碼是更加混亂..宏不起作用
#include "stdio.h"
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main(void)
{
printf("%s\n",h(f(1,2)));
printf("%s\n",g(1));
printf("%s\n",g(f(1,2)));
return 0;
}
輸出
12
1
f(1,2)
我的假設是 1)第一f(1,2)
被替換出來由12
,因爲宏f(a,b)
concantenates其論據 2)然後g(a)
宏替換1
一個字符串升人"1"
3)輸出應爲1
但是爲什麼g(f(1,2))
沒有得到取代以12
。 我相信我在這裏錯過了一些東西。 有人可以解釋我這個程序嗎?
因爲g是在f之前求值的,它將'f(1,2)'轉換爲一個字符串文字。 –
你說標題中的C(你不需要),但標記C++?這可能沒有什麼不同,但你應該保持一致。 – crashmstr