今天在恰好在項目開發的過程中,遇到了一個有關宏定義的問題。
項目運用的背景如下:
項目中有個頭文件中定義了一個宏定義,比如是 #define CFG_LOGGER_NAME uart
然后,在某個C文件中需要講這個3轉換成對應的字符串類型,即為"uart";很明顯,如果按以下的幾種方式定義,肯定得不到期望的結果:
方式1: #defineCFG_LOGGER_NAME_STR "CFG_LOGGER_NAME"
方式2: #defineCFG_LOGGER_NAME_STR #CFG_LOGGER_NAME
方式3: #defineCFG_LOGGER_NAME_STR ##CFG_LOGGER_NAME
為了解決這個問題,特意再次去查看了有關C語言宏定義的語法,終于找到了解決方法,具體的思路是,需要用一個“中間宏函數”做轉換:
#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)
就這樣,經過上面的宏定義處理后,訪問CFG_LOGGER_NAME_STR的值,取到的就是期望值"uart".
雖然方法很簡單,但是里面卻包含了宏定義最基礎的語法知識,有機會可以再多多補充下宏定義相關的知識。
——————————————————————————————————————
附錄,demo測試如下:


審核編輯:湯梓紅
?
-
C語言
+關注
關注
180文章
7626瀏覽量
139569 -
字符串
+關注
關注
1文章
589瀏覽量
20931 -
宏定義
+關注
關注
0文章
51瀏覽量
9146
發布評論請先 登錄
相關推薦
評論