C宏观磅标志和加号

时间:2014-06-14 20:57:03

标签: c

我遇到了以下代码段。双磅符号和加号是什么意思?

#define MPID_Get_ptr(kind,a,ptr)                    \
{                                                   \
   switch (HANDLE_GET_KIND(a)) {                    \
      case HANDLE_KIND_DIRECT:                      \
          ptr=MPID_##kind##_direct+HANDLE_INDEX(a);

谢谢, 扎克

1 个答案:

答案 0 :(得分:2)

这是令牌粘贴操作符。

来自The C Programming language, 2nd edition, Kernighan & Ritchie

  

“预处理程序运算符##提供了一种在宏扩展期间连接实际参数的方法。如果替换文本中的参数与##相邻,则参数将被实际参数替换, ##和周围的空白区域被删除,结果将被重新扫描。例如,宏粘贴连接其两个参数:

#define paste(front, back) front ## back
     

因此paste(name, 1)会创建令牌name1