有人可以帮我破译以下预处理器语句。
#define ALLOC(x,y) x _##y; x* y = &_##y;
我知道这里已经为 x 类型的某个变量 y 分配了一些内存。但我不确定上面语句中## 的目的是什么。如果有人可以帮助我,那就太好了。
有人可以帮我破译以下预处理器语句。
#define ALLOC(x,y) x _##y; x* y = &_##y;
我知道这里已经为 x 类型的某个变量 y 分配了一些内存。但我不确定上面语句中## 的目的是什么。如果有人可以帮助我,那就太好了。
这就是所谓的令牌粘贴运算符。
当您需要从两个(或更多)单独的标记中制作一个标记时,使用标记粘贴运算符 (##)。
没有它,即
#define ALLOC(x,y) x _y; x* y = &_y;
ALLOC(a,b)
将扩展为:
a _y; a* b = &_y;
因为预处理器知道用 b 替换 y 但 _y 完全是另一个标记。
使用 ## 运算符(即您的示例)
ALLOC(a,b)
将扩展为:
a _b; a* b = &_b;
##将token_
和tokenb
连接起来形成token_b
一个用法如
ALLOC(int, integer)
将在调用宏的位置创建以下代码:
int _integer;
int* integer = &_integer;
如果我没记错的话## 表示连接“字符串本身”。
例如你的情况 ALLOC(int,var2) == > int_var2; int* var2 = &_var2