我使用以下宏来声明我的所有结构..
#define structure typedef struct
用这个我声明一个结构,例如
structure
{
int foo;
int(*proc)(void*);
}
_myobject;
成员proc,真的收到了指针的参数 到它所属的结构..
e.g。
myobj.proc(&myobj);
我的问题是,如何声明成员proc
的类型为
作为一个结构传递给它,而不是void *
..我知道它没有
不同的是,这只是为了美学,因为我花了很多时间
保持我的代码干净..
structure
{
int foo
int(*foo)(_myobject*);
}
_myobject;
产生
error: expected ':', ',', ';', '}' or '__attribute__' before 'int'|
答案 0 :(得分:4)
你试图以递归方式引用你的结构,这对于typedef并不好用。以下之一应该做:
typedef struct _myobject _myobject;
struct _myobject {
int foo;
int (*proc)(_myobject*);
};
...
typedef struct _myobject {
int foo;
int (*proc)(struct _myobject*);
} _myobject;
编辑:如果您想尽可能继续使用structure
(尽管如此,除了与现有代码的一致性之外,我不确定您为什么要这样做),你可以这样做:
structure _myobject _myobject;
struct _myobject {
int foo;
int (*proc)(_myobject*);
};
...
structure _myobject {
int foo;
int (*proc)(struct _myobject*);
} _myobject;
虽然这两个都需要使用struct
标识符,但如果你想避免这种情况。
答案 1 :(得分:1)
您可以稍微更改一下宏:
#define structure(x,y) typedef struct x y x
structure (_myobject,
{
int foo;
int(*proc)(struct _myobject*);
}
);
这对我来说很糟糕。另一种方法是:
#define structure typedef struct
structure _myobject
{
int foo;
int(*proc)(struct _myobject*);
}
_myobject;