c包含函数指针的结构

时间:2013-11-29 02:58:01

标签: c pointers structure

我使用以下宏来声明我的所有结构..

#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'|

2 个答案:

答案 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;
相关问题