前言
有一個需求是將一個宏和一個字符串拼接,然後在代碼中拿到這個字符串,記錄一下。
方案
首先,我們知道非常常見的一個宏的拼接和展示字符串的宏定義:
#define CONTACT(x,y) x##y //拼接
#define STR(x) #x //轉字符串
這種宏定義在開發中是很常見的!
但是,如果上邊我們那個需求中,讓一個字符串和一個宏的值進行拼接的話,純粹使用上邊的宏就不行了,這裏我們要使用二級的宏,這樣才能拼接到宏的值:
//二級
#define CONTACT2(x,y) CONTACT(x,y)
#define STR2(x) STR(x)
那麼這時候,舉個例子,比如說,我們需要在"build_id_"
後邊加上對應的ID
:
#define ID 111
//我們可以
#define build_id_str CONTACT2(build_id_, ID)
//在代碼中獲取對應的宏展示字符串
char *build_id = STR2(build_id_str);
print("build_id: %s\n", build_id);
將輸出拼接好的字符串:build_id_111
。