今天在恰好在項(xiàng)目開發(fā)的過程中,遇到了一個(gè)有關(guān)宏定義的問題。
項(xiàng)目運(yùn)用的背景如下:
項(xiàng)目中有個(gè)頭文件中定義了一個(gè)宏定義,比如是 #define CFG_LOGGER_NAME uart
然后,在某個(gè)C文件中需要講這個(gè)3轉(zhuǎn)換成對應(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è)問題,特意再次去查看了有關(guān)C語言宏定義的語法,終于找到了解決方法,具體的思路是,需要用一個(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)過上面的宏定義處理后,訪問CFG_LOGGER_NAME_STR的值,取到的就是期望值"uart".
雖然方法很簡單,但是里面卻包含了宏定義最基礎(chǔ)的語法知識,有機(jī)會(huì)可以再多多補(bǔ)充下宏定義相關(guān)的知識。
——————————————————————————————————————
附錄,demo測試如下:
審核編輯:湯梓紅
?
-
C語言
+關(guān)注
關(guān)注
180文章
7598瀏覽量
136207 -
字符串
+關(guān)注
關(guān)注
1文章
577瀏覽量
20485 -
宏定義
+關(guān)注
關(guān)注
0文章
50瀏覽量
9001
發(fā)布評論請先 登錄
相關(guān)推薦
評論