今天在恰好在項(xiàng)目開(kāi)發(fā)的過(guò)程中,遇到了一個(gè)有關(guān)宏定義的問(wèn)題。
項(xiàng)目運(yùn)用的背景如下:
項(xiàng)目中有個(gè)頭文件中定義了一個(gè)宏定義,比如是 #define CFG_LOGGER_NAME uart
然后,在某個(gè)C文件中需要講這個(gè)3轉(zhuǎn)換成對(duì)應(yīng)的字符串類型,即為"uart";很明顯,如果按以下的幾種方式定義,肯定得不到期望的結(jié)果:
方式1: #defineCFG_LOGGER_NAME_STR "CFG_LOGGER_NAME"
方式2: #defineCFG_LOGGER_NAME_STR #CFG_LOGGER_NAME
方式3: #defineCFG_LOGGER_NAME_STR ##CFG_LOGGER_NAME
為了解決這個(gè)問(wèn)題,特意再次去查看了有關(guān)C語(yǔ)言宏定義的語(yǔ)法,終于找到了解決方法,具體的思路是,需要用一個(gè)“中間宏函數(shù)”做轉(zhuǎn)換:
#define CFG_LOGGER_NAME uart
#define TO_STRING(x) #x
#define _CFG_LOGGER_NAME_STR(x) TO_STRING(x)
#defineCFG_LOGGER_NAME_STR _CFG_LOGGER_NAME_STR(CFG_LOGGER_NAME)
就這樣,經(jīng)過(guò)上面的宏定義處理后,訪問(wèn)CFG_LOGGER_NAME_STR的值,取到的就是期望值"uart".
雖然方法很簡(jiǎn)單,但是里面卻包含了宏定義最基礎(chǔ)的語(yǔ)法知識(shí),有機(jī)會(huì)可以再多多補(bǔ)充下宏定義相關(guān)的知識(shí)。
——————————————————————————————————————
附錄,demo測(cè)試如下:
審核編輯:湯梓紅
?
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7608瀏覽量
137110 -
字符串
+關(guān)注
關(guān)注
1文章
584瀏覽量
20552 -
宏定義
+關(guān)注
關(guān)注
0文章
51瀏覽量
9036
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論