#是預(yù)處理?是的,你可以這么認(rèn)為。那怎么用它呢? 別急,先看下面例子:
#define SQR(x) printf("The square of x is %d.\n", ((x)*(x)));
如果這樣使用宏:
SQR(8);
則輸出為:
The square of x is 64.
注意到?jīng)]有,引號(hào)中的字符 x 被當(dāng)作普通文本來(lái)處理,而不是被當(dāng)作一個(gè)可以被替換的語(yǔ)言符號(hào)。
假如你確實(shí)希望在字符串中包含宏參數(shù),那我們就可以使用“#” ,它可以把語(yǔ)言符號(hào)轉(zhuǎn)
化為字符串。上面的例子改一改:
#define SQR(x) printf("The square of "#x" is %d.\n", ((x)*(x)));
再使用:
SQR(8);
則輸出的是:
The square of 8 is 64.
很簡(jiǎn)單吧?相信你現(xiàn)在已經(jīng)明白#號(hào)的使用方法了。
##運(yùn)算符可以用于宏函數(shù)的替換部分。這個(gè)運(yùn)算符把兩個(gè)語(yǔ)言符號(hào)組合成單個(gè)語(yǔ)言符號(hào)??蠢樱?/p>
#define XNAME(n) x ## n
如果這樣使用宏:
XNAME(8)
則會(huì)被展開(kāi)成這樣:
x8
也就是說(shuō),##就是個(gè)粘合劑,將前后兩部分粘合起來(lái)。