给出以下结构,
typedef struct tCard {
CardClass class;
void *proto;
} Card;
typedef struct tCardPath {
PathType path_type;
struct tPath path;
Goal goal;
} CardPath;
是否可以使用宏来访问指向struct(proto)的指针指向的元素,如下所示?
((CardPath*)(trial[i].proto))->element1; // this works
CARD_PROP(trial[i], Path, element1); // the goal
我试过这个,但这在编译时会给出error: expected identifier before ‘(’ token
,
#define PROTO(C) (C).proto
#define CARD_PROP(C, CARD, PROP) (((Card##CARD *)(PROTO(C)))->(PROP))
编辑: 试过这个,仍然没有工作
#define CARD_PROP(C, CARD, PROP) ((Card##CARD *)(PROTO(C))->PROP
答案 0 :(得分:3)
问题是你不能把结构的成员放在括号中。您的宏扩展为:
((CardPath*)(trial[i].proto))->(element1)
^^^^^^^^^^
在上面标记的地方不应该有括号。