字符串操作宏:‘,’标记之前预期有说明符限定符列表

问题描述 投票:0回答:1

我正在尝试编写一个宏,它将自动定义由组合和函数指针存档的多态类型。

我对宏字符串操作不太了解。这就是我对宏定义的想象:

#define INSTANCE(ret, name, ...) ret (*name)(__VA_ARGS__);
#define TYPE(name, ...) typedef struct { Object base; __VA_ARGS__ } name

它可以像下面这样使用:

TYPE(A,
     INSTANCE(void, print_name, void),
     INSTANCE(void, set_id, char *, id)
);

在本例中,生成的结构应该是:

typedef struct {
    Object base;
    void (*print_name)(void);
    void (*set_id)(char *);
} A;

在我的实现中,编译器返回错误:

main.c:14:38: error: expected specifier-qualifier-list before ‘,’ token
   14 |      INSTANCE(void, print_name, void),
      |                                      ^

这是否意味着“函数指针求值的参数”失败了?我做错了什么?

c types macros polymorphism
1个回答
0
投票

问题在于您在使用宏时有多余的逗号。你需要像这样使用它:

TYPE(A,
     INSTANCE(void, print_name, void)   /* no comma here */
     INSTANCE(void, set_id, char *, id)
);
© www.soinside.com 2019 - 2024. All rights reserved.