如何使用宏参数将宏定义为_Pragma

时间:2012-09-14 00:15:43

标签: arguments literals pragma

我一直在编写C ++,但是它的宏观经验很少。我已经阅读了关于这个主题的一些其他问题,但我无法将它们完全转化为我的问题。

我想定义一个宏,以便编码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没有引用字符串。

有人可以请你这个幽默吗?非常感谢。

1 个答案:

答案 0 :(得分:2)

好的,我明白了。

我定义了一个通用的宏STRINGIFY:

#define STRINGIFY(str) #str

现在真正的宏仅仅归结为

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

感谢您的耐心等待。