我遇到了以下代码段。双磅符号和加号是什么意思?
#define MPID_Get_ptr(kind,a,ptr) \
{ \
switch (HANDLE_GET_KIND(a)) { \
case HANDLE_KIND_DIRECT: \
ptr=MPID_##kind##_direct+HANDLE_INDEX(a);
谢谢, 扎克
答案 0 :(得分:2)
这是令牌粘贴操作符。
来自The C Programming language, 2nd edition, Kernighan & Ritchie:
“预处理程序运算符
##
提供了一种在宏扩展期间连接实际参数的方法。如果替换文本中的参数与##
相邻,则参数将被实际参数替换,##
和周围的空白区域被删除,结果将被重新扫描。例如,宏粘贴连接其两个参数:#define paste(front, back) front ## back
因此
paste(name, 1)
会创建令牌name1
。