【问题标题】:Expand macro inside string literal在字符串文字内展开宏
【发布时间】:2014-01-05 02:00:10
【问题描述】:

我想做的是#define一个宏:

#define a(2)

然后在字符串文字中使用它:string = "a";

我希望该字符串不被解释为字符串,而是获取a 的值,即 2。我没有成功,有人可以帮忙吗?

【问题讨论】:

    标签: c++ c++11 visual-c++ macros


    【解决方案1】:

    不,您不能在字符串文字内部进行宏扩展(即让预处理器在文字内部查找要扩展的宏)。

    您可以使用 stringify 运算符 (#) 进行宏扩展以生成字符串文字。但那是另一回事。

    【讨论】:

      【解决方案2】:
      #define STRINGIFY2(X) #X
      #define STRINGIFY(X) STRINGIFY2(X)
      #define A 2
      

      然后STRINGIFY(A) 会给你"2"。您可以将它们并排放置,将其与其他字符串文字连接起来。

      "I have the number " STRINGIFY(A) "." 给你"I have the number 2."

      【讨论】:

      • 现在添加连接相邻字符串文字的关键元素,这就是答案。
      • 如果你不想依赖串联功能,你可以试试:STRINGIFY(I have the number A)(我不确定最后的点)。
      • 请注意包装扩展的额外间接性,这是必需的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2011-11-16
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多