这个##模式在C语言中意味着什么

时间:2014-03-30 04:34:29

标签: c c-preprocessor

我从未在我读过的任何书籍中看过这个##模式。那么这是什么意思?我无法理解涉及##:

的这些代码
#define DECLARE_STRUCT_MRC_CLASS(sfx, obj_type)         \
  struct mrc_class ## sfx {                             \
    const char *name;                                   \
    list_t subclasses;                                  \
    list_t instances;                                   \
    size_t size;                                        \
    bool initialized;                                   \
    void (*create)(obj_type *);                         \
    void (*destroy)(obj_type *);                        \
  }

DECLARE_STRUCT_MRC_CLASS(, struct mrc_obj);

#define MRC_CLASS_DECLARE(pfx, obj_type)                                \
  obj_type;                                                             \
  DECLARE_STRUCT_MRC_CLASS(_ ## pfx, obj_type);                         \
                                                                        \
  extern struct mrc_class_ ##pfx mrc_class_ ## pfx;                     \
  static inline obj_type *                                              \
  pfx ## _create(MPI_Comm comm)                                         \
  {                                                                     \
    return (obj_type *)                                                 \
      __mrc_obj_create(comm, (struct mrc_class *) &mrc_class_ ## pfx);  \
  }                                                                     \

任何澄清表示赞赏。提前谢谢!

2 个答案:

答案 0 :(得分:4)

令牌粘贴。它实际上将两侧的两个标记粘合在一起,形成一个看起来像编译器的新单一标记:

pri ## ntf("Hello, world!\n");

一旦你将通常的样板文件添加到上面,它就应该编译并完成预期的事情。

答案 1 :(得分:0)

它用于连接令牌。她的详细解释如下:http://gcc.gnu.org/onlinedocs/cpp/Concatenation.html