宏定义的双井号

今日写作业(Cuda)发现老师给的框架中有一段宏定义没有看懂

1
2
3
// access element (i,j) of array u with leading dimension ldu
#define V(u, i, j) u[(i)*(ld##u) + (j)]
#define V_(u, ldu, i, j) u[(i)*(ldu) + (j)]

第二个V_很好懂,但第一个后面的##两个井号没有太搞懂是什么意思。

查询后发现#字符串化操作符,将宏定义中的传入参数名转换成用一对双引号括起来的参数名字符串。两个井号##叫做符号连接 操作符,将两个标识符贴在一起形成新的标识符。

在这个例子中就是用V(u, i, j)中的u替换ld##u中的u。 如V(u, i, j)会被替换为u[i * ldu + j]V(v, i, j)则会被替换成v[i * ldv +j]


宏定义的双井号
https://noeliufz.github.io/2024/05/17/hong-ding-yi-de-shuang-jing-hao/
作者
Fangzhou Liu
發布於
2024年5月17日
許可協議