2012-09-14 67 views
2

我一直在編寫C++一段時間,但只有很少的宏觀體驗。我已閱讀了關於此主題的其他一些問題,但我無法將它們翻譯成我的問題。如何將宏定義爲具有宏參數的_Pragma

我想定義一個宏使得編碼ENUM_PRAGMA(foo)產生_Pragma("enum(foo)")我打算具有#pragma enum(foo)

效果(編譯器支持_Pragma("string")

我曾嘗試的

#define ENUM_PRAGMA(siz) \ 
_Pragma("enum(" #siz ")") 
多種變化

但無法讓他們工作。

基於How do I implement a macro that creates a quoted string for _Pragma?我試圖

#define HELPER1(x) enum(x) 
#define HELPER2(y) HELPER1(#y) 
#define ENUM_PRAGMA(siz) _Pragma(HELPER2(siz)) 

但我仍然不能令人信服。 (錯誤是string literal was expected but enum was found,所以我想我的HELPER2未引用的字符串。

任何人都可以請幽默我這?謝謝了。

回答

2

好吧,我知道了。

我定義了一個通用的宏字符串化:

#define STRINGIFY(str) #str 

現在真正的宏觀歸結只是

#define ENUM_PRAGMA(siz) _Pragma(STRINGIFY(enum(siz))) 

感謝您的耐心等待。