2009-12-01 56 views
0

我已經得到了下面的宏定義以下特殊的命名方案的新功能:在C宏中強制空白?

#define CREATE_HOOK_STUB(func) void ##func_STUB() { /* some code*/ } 

然而,預處理總是串接void##func_STUB,但我當然希望它在該位置保留空白。

我知道我可以預先給##func_STUB添加一些字符串,但這不是我想要的。 我會如何解決這個問題?

回答

6

我想你真正想要的是更接近:

#define CREATE_HOOK_STUB(func) void func##_STUB() { /* some code*/ } 

但你也應該看看this linked SO answer這對標記粘貼操作的行爲的一些額外的細節:

一件事要知道何時使用令牌粘貼('##')或字符串化('#')預處理操作符是因爲您必須使用額外的間接級別才能在所有情況下正常工作。

如果你不這樣做,並傳遞給標記粘貼操作的項目是宏自己,你會得到的結果是可能不是你想要什麼......

+0

Thanks..dumb error :) – newgre 2009-12-01 21:00:34