c++ - 当预处理器看到 SLOT(a) "1"#a 时会发生什么

标签 c++ c-preprocessor stringification

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

#define <identifier> <replacement>

假设我们有以下内容:

#define SLOT(a) "1"#a

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

我明白 # 的意思是获取字符串文字。那么,在宏之后,我们岂不是有

"1""myValue(int)"

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

最佳答案

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

  1. # 运算符是字符串运算符。
  2. 两个字符串字面量相继被0个或多个白色隔开 空格字符连接成单个字符串文字。

关于c++ - 当预处理器看到 SLOT(a) "1"#a 时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23589175/

相关文章:

c++ - g++ 预处理器输出

C: 在不显式传递 `this` 的情况下调用类方法?

c++ - 可视化标记条件编译

c++ - 在模板类中设置函数指针的问题

c++ - 拥有对象实例与拥有指针

c++ - 使用 CRTP 时如何避免错误?

c++ - 预处理器tomfoolery(字符串化#include)

c++ - 组合字符串文字和整数常量

c++ - 宏内的字符串连接

c++ - 从 vector 中删除最后一个元素会导致迭代出现问题