2

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

我想定义一个宏,以便编码ENUM_PRAGMA(foo)产生_Pragma("enum(foo)")我打算产生的效果#pragma enum(foo)

(编译器支持_Pragma("string")。)

我尝试了多种变体

#define ENUM_PRAGMA(siz)  \
_Pragma( "enum(" #siz ")" ) 

但不能让他们中的任何一个工作。

基于如何实现为 _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 没有引用字符串。

任何人都可以请幽默我吗?非常感谢。

4

1 回答 1

2

好的,我明白了。

我定义了一个通用宏STRINGIFY:

#define STRINGIFY(str) #str

现在真正的宏简单地归结为

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

谢谢你的耐心。

于 2012-09-14T16:30:26.710 回答