一、問題
????????有?認為,在C 語?中使?“#”運算符的就是預處理,是不是呢?“##”?是什么呢?
二、解答
????????在程序中,最為常?的是#define 宏定義指令,下?通過這個指令理解?下“#”的作?。編寫?個預處理指令,代碼如下。
#define S(x) printf("x的平?為%d\n",(x) * (x))
main()
{S(4);
}
????????看到這個程序,很容易理解程序運?結果是什么。程序的運?結果如下所示。
x的平方為16
????????那么,怎樣才能使輸出時的字符 x 被當做需要替換的符號呢?希望能夠在輸出的字符串中包含宏參數,如下代碼就可以滿?這個要求。
#define S(x) printf("#x的平?為%d\n",(x) * (x))
main()
{S(4);
}
????????程序運?結果如下所示。
4的平方為16
????????結果是令?滿意的,那么“#”運算符在預處理指令中的作?也就清晰可見了。它的功能是可以把語?符號轉化為字符串。
????????“##”運算符與“#”運算符?樣,可以?于宏函數的替換部分。這個運算符還可以起到粘合劑的作?,即將兩個語?符號組合成單個語?符號。例如:
#define X(n) n##n
main()
{printf("%d\n", X(3));
}
????????可以得到 n 被宏函數替換成3,并且粘合到?起,得到33。程序運?結果如圖下所示。
33
三、總結
????????C語 ?博?精深,??的運算符“#”和“##”就有如此?的功能,但是它們的功能卻很少有?了解。