1村斟、#運(yùn)算符
我們平時(shí)使用帶參宏時(shí)鸠删,字符串中的宏參數(shù)是沒有被替換的抱完。例如:
輸出結(jié)果為:
然而,我們期望輸出的結(jié)果是:
5 + 20 = 25
13 + 14 = 27
這該怎么做呢刃泡?其實(shí)馋贤,C語言允許在字符串中包含宏參數(shù)遥皂。在類函數(shù)宏(帶參宏)中声搁,#號(hào)
作為一個(gè)預(yù)處理運(yùn)算符
掖看,可以把記號(hào)轉(zhuǎn)換成字符串
眨层。例如庙楚,如果A是一個(gè)宏形參,那么#A就是轉(zhuǎn)換為字符串"A"的形參名趴樱。這個(gè)過程稱為字符串化(stringizing)
馒闷。以下程序演示這個(gè)過程:
輸出結(jié)果為:
這就達(dá)到我們想要的結(jié)果了。所以叁征,#運(yùn)算符
可以完成字符串化(stringizing)
的過程纳账。
2、##運(yùn)算符
與#運(yùn)算符類似捺疼,##運(yùn)算符
可用于類函數(shù)宏(帶參宏)的替換部分疏虫。##運(yùn)算符
可以把兩個(gè)記號(hào)組合成一個(gè)記號(hào)。例如,可以這樣做:
#define XNAME(n) x##n
然后卧秘,宏XNAME(4)將展開x4呢袱。以下程序演示##運(yùn)算符
的用法:
輸出結(jié)果為:
注意:PRINT_XN()
宏用#運(yùn)算符
組合字符串,##運(yùn)算符
把記號(hào)組合為一個(gè)新的標(biāo)識(shí)符翅敌。
其實(shí)羞福,##運(yùn)算符
在這里看來并沒有起到多大的便利,反而會(huì)讓我們感覺到不習(xí)慣蚯涮。但是治专,使用##運(yùn)算符
有時(shí)候是可以提高封裝性及程序的可讀性的。如stm32的一些例程中遭顶,關(guān)于gpio的硬件驅(qū)動(dòng)中有如下代碼:
#define __STM32_PIN(index, gpio, gpio_index) \
{ \
index, GPIO##gpio##_CLK_ENABLE, GPIO##gpio, GPIO_PIN_##gpio_index \
}
假設(shè)這樣使用該宏:
__STM32_PIN(7, C, 13)
該宏將展開為:
{7, GPIOC_CLK_ENABLE, GPIOC, GPIO_PIN_13}
然后這就可以很方便的將要使用的硬件引腳這么一一列出來张峰,然后再拿去進(jìn)行配置:
以上就是關(guān)于#運(yùn)算符與##運(yùn)算符的筆記,用#運(yùn)算符組合字符串液肌,##運(yùn)算符把記號(hào)組合為一個(gè)新的標(biāo)識(shí)符挟炬。如有錯(cuò)誤歡迎指出。資料:『RT-Thread-IoT代碼』嗦哆、『C Primer Plus』谤祖。
關(guān)注我的公號(hào)【嵌入式大雜燴】,回復(fù):C語言老速,可獲取C語言資料粥喜。
關(guān)注我的個(gè)人博客:【我的博客】查看更多筆記