0

有人可以帮我破译以下预处理器语句。

#define ALLOC(x,y)     x _##y; x* y = &_##y;

我知道这里已经为 x 类型的某个变量 y 分配了一些内存。但我不确定上面语句中## 的目的是什么。如果有人可以帮助我,那就太好了。

4

4 回答 4

4

这就是所谓的令牌粘贴运算符

于 2011-01-17T14:25:11.857 回答
3

当您需要从两个(或更多)单独的标记中制作一个标记时,使用标记粘贴运算符 (##)。

没有它,即

#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

于 2011-01-17T14:34:02.850 回答
1

一个用法如

ALLOC(int, integer)

将在调用宏的位置创建以下代码:

int  _integer;
int* integer = &_integer;
于 2011-01-17T14:29:37.670 回答
0

如果我没记错的话## 表示连接“字符串本身”。

例如你的情况 ALLOC(int,var2) == > int_var2; int* var2 = &_var2

于 2011-01-17T14:28:20.913 回答