我想創建一個C宏,該行創建一個名稱爲 的函數。 我想我可以做這樣的事情(真正的功能將有大括號內的語句):使用##和__LINE__創建C宏(與定位宏連接的令牌)
#define UNIQUE static void Unique_##__LINE__(void) {}
這一點我希望這將擴大到是這樣的:
static void Unique_23(void) {}
這是行不通的。與令牌串接,定位宏 字面上處理,結束了擴大到:
static void Unique___LINE__(void) {}
這是可能的嗎?
(是的,有一個真正的原因,我想這樣做,不管這看起來多麼無用)。
可能重複的[如何連接使用C預處理器兩次,然後展開一個宏,如「arg ## \ _ ## MACRO」?](http://stackoverflow.com/questions/1489932/how-to-concatenate-twice-with-the-c- preprocessor- and-expand-a-macro-as-in-arg)除了'__LINE__'之外,任何宏都是一樣的(儘管這是一個常見的用例。 – 2015-06-21 09:54:51
我認爲你可以通過[間接宏擴展](http://en.wikipedia.org/wiki/C_preprocessor#Indirectly_quoting_macro_arguments)來獲得此功能。 – 2009-10-20 20:28:32