我一直在编写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没有引用字符串。
有人可以请你这个幽默吗?非常感谢。
答案 0 :(得分:2)
好的,我明白了。
我定义了一个通用的宏STRINGIFY:
#define STRINGIFY(str) #str
现在真正的宏仅仅归结为
#define ENUM_PRAGMA(siz) _Pragma(STRINGIFY(enum(siz)))
感谢您的耐心等待。