宏中的#和##

本文截取自:https://blog.csdn.net/boring_wednesday/article/details/78756696

#的用法

首先要理解一個(gè)原則,即鄰近字符串連接原則

在C語(yǔ)言中
printf(“hello”” world!”“\n”);
這句話是合法的
打印結(jié)果為:
hello world!

按照上述原則,我們可以寫出下列代碼:

#define PRINT(FORMAT, VALUE) printf("the value of " #VALUE " is "FORMAT"\n", VALUE)

int main()
{
    int i = 0;
    PRINT("%d", i + 3);
    return 0;
}

看下gcc編譯后的代碼,程序正常運(yùn)行。


20171209173118273.png

再通過(guò)gcc生成test.i文件看下預(yù)處理是怎么樣的:


20171209173520670.png

所以我們可以看出來(lái)#的作用:
將一個(gè)宏參數(shù)變成一個(gè)對(duì)應(yīng)的字符串
在上述例子中:

#VALUE被替換成了“i + 3”

別忘了被替換的時(shí)候i + 3兩邊加上了雙引號(hào)

##的用法

看下面的代碼片段

#define ADD_TO_AN(num, value) a##num += value

int main()
{
    int a1 = 0;
    int a2 = 0;
    ADD_TO_AN(1, 5);
    ADD_TO_AN(2, 6);
    return 0;
}

解釋一下上面這段代碼
假設(shè)有一個(gè)變量叫a1
此時(shí)代碼片段為ADD_TO_AN(1, 5)
即替換為a1 += 5,給a1變量增加5
同理ADD_TO_AN(2, 6)則替換成a2 += 6

##的作用

將##兩邊的字符連在一起作為一個(gè)標(biāo)識(shí)符
前提連接后的標(biāo)識(shí)符必須合法,否則編譯出現(xiàn)標(biāo)識(shí)符未定義

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,311評(píng)論 0 10
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,235評(píng)論 0 38
  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語(yǔ)閱讀 4,021評(píng)論 0 7
  • 江楠是一個(gè)紋眉師,初次見(jiàn)她,她坐在賓館床頭,翹著一雙細(xì)長(zhǎng)的二郎腿,手里夾著女士香煙,透過(guò)細(xì)細(xì)的煙霧,瞇著眼縫看我:...
    桃_夭閱讀 370評(píng)論 7 6
  • 晴雨晝夜季誰(shuí)主?熱氣潛催,花肥綠濃,蟬鳴聲聲,俱遷芳樹。觀雨濕單薄衣,靜聽(tīng)有鳥語(yǔ)。曉來(lái)窗前婉囀,似把深情,開(kāi)心低訴...
    悠游魚閱讀 243評(píng)論 1 3

友情鏈接更多精彩內(nèi)容