I never saw this ## pattern before and in any books I read. So what does this ## mean? I cannot understand these pieces of code involving ##:
#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 *);                        \
  }
and
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);  \
  }                                                                     \
Any clarification is appreciated. Thanks in advance!
 
     
    