小知識(shí):C語言宏定義中#和##符號(hào)的用法
時(shí)間:2023-01-31 09:36:01 | 來源:建站知識(shí)
時(shí)間:2023-01-31 09:36:01 來源:建站知識(shí)
在某些C語言代碼中,有時(shí)我們可能會(huì)看到宏定義中帶有#、##,這些符號(hào)有特殊的作用。下面,我們用幾個(gè)簡單的例子來說明一下。
1、一個(gè)#的作用
一個(gè)#的作用就是把后面的參數(shù)當(dāng)做一個(gè)字符串,也就是說等同于把后面的宏變量加上雙引號(hào):
運(yùn)行上述代碼,可以得到輸出:Hello world 1Hello world 2這說明 #define PRINT(NAME) printf(#NAME)這個(gè)宏,等同于把NAME加上了雙引號(hào)“”,即替換成了“NAME”,所以,第一個(gè)PRINT可以直接把括號(hào)內(nèi)的內(nèi)容打印出來。有些地方會(huì)提到#@符號(hào),可以把后面的宏變量字符化,也就是說加上單引號(hào)’’,但是不推薦使用這個(gè)符號(hào),主要是很多平臺(tái)下都不支持。
2、兩個(gè)##的作用
兩個(gè)##是連接符,即把兩個(gè)宏變量拼接到一起,看下面的例子:
定義了兩個(gè)宏LINK和POWER,LINK直接把兩個(gè)宏變量拼接起來,所以n等于1234;POWER把兩個(gè)宏變量和e順次拼接,所以n2等于2e3,也就是等于2000。
【嵌入式物聯(lián)網(wǎng)單片機(jī)學(xué)習(xí)資料】整理了全套精華學(xué)習(xí)資料,除了教程外,還有一些大廠面經(jīng)+筆試面試題,開源共享給大家。
點(diǎn)擊加V自?。?/b>
3、注意事項(xiàng)
#和##在宏定義中使用時(shí),它后面的參數(shù)如果也是一個(gè)宏,那么是不會(huì)展開的。如下面的例子:
這段代碼是會(huì)編譯報(bào)錯(cuò)的,LINK(A,B)這句只會(huì)展開成AB,而不會(huì)再往下一層把A、B也展開成12、34。由于AB是未定義的,所以編譯報(bào)錯(cuò)。解決辦法是再定義一個(gè)宏,做一個(gè)中間轉(zhuǎn)換:
定義一個(gè)_LINK(AA,BB)的宏做中間轉(zhuǎn)換,就能正常把LINK(A,B)展開_LINK(A,B),最終展開成1234。好了,本節(jié)的內(nèi)容就分享到這了,希望這篇文章能對(duì)大家有所幫助。END
來源:小白白學(xué)電子
原文鏈接:小知識(shí):C語言宏定義中#和##符號(hào)的用法
轉(zhuǎn)載自:嵌入式微處理器
文章來源于單片機(jī)與嵌入式
版權(quán)聲明:本文來源網(wǎng)絡(luò),免費(fèi)傳達(dá)知識(shí),版權(quán)歸作者所有,如涉及作品版權(quán)問題,請(qǐng)聯(lián)系我進(jìn)行刪除。
關(guān)鍵詞:符號(hào),知識(shí),語言,定義