【问题标题】:What happens when the preprocessor sees SLOT(a) "1"#a当预处理器看到 SLOT(a) "1"#a 时会发生什么
【发布时间】:2014-05-11 05:12:59
【问题描述】:

我的理解是预处理器#defineidentifier替换为replacement

#define <identifier> <replacement>

假设我们有以下内容:

#define SLOT(a) "1"#a

void myValue(int value);
SLOT(myValue(int));

我知道# 的意思是获取字符串字面量。因此,在宏之后,我们不会有

"1""myValue(int)"

...本质上是两个背靠背的字符串文字。我猜预处理器会自动将两个字符串文字背靠背连接起来。这是真的?我在哪里可以找到有关此事实的信息?

【问题讨论】:

  • C++ 11 标准中涵盖了字符串文字连接,特别是第 2.14.5 节 [lex.string] 第 13 段。您可以在其中阅读更多相关信息(以及更多关于字符串文字的信息)部分。

标签: c++ c-preprocessor stringification


【解决方案1】:

是的,你的理解是正确的。

  1. # 运算符是字符串化运算符。
  2. 两个字符串文字一个接一个地被0或多​​个白色分隔 空格字符连接成单个字符串文字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多