【问题标题】:How define macro as _Pragma with macro argument如何使用宏参数将宏定义为 _Pragma
【发布时间】:2012-09-07 03:34:14
【问题描述】:

我写 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 没有引用字符串。

任何人都可以在这方面取笑我吗?非常感谢。

【问题讨论】:

    标签: arguments literals pragma


    【解决方案1】:

    好的,我明白了。

    我定义了一个通用宏STRINGIFY:

    #define STRINGIFY(str) #str
    

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

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

    感谢您的耐心等待。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 2020-01-15
      • 2020-11-22
      • 1970-01-01
      • 2013-12-28
      • 2017-01-14
      • 1970-01-01
      相关资源
      最近更新 更多