c typedef(ed)opaque指针

时间:2011-03-14 13:34:21

标签: c struct typedef opaque-pointers

我已经定义了一个不透明的结构和相关的API,如下所示:

typedef struct foo foo;
foo *create_foo(...);
delete_foo(foo *f);

我无法在c文件中定义结构。给出重新定义错误。

typedef struct foo {
   int implementation;
}foo;

我可以在没有typedef的c文件中使用foo,但我想要typedef(即直接使用它作为foo *)。有办法吗?

1 个答案:

答案 0 :(得分:21)

您的标头中已有typedef,因此请在不使用struct foo的实施中包含该typedef

foo.h

typedef struct foo foo;
foo *create_foo(...);
delete_foo(foo *f);

foo.c

#include <foo.h>

struct foo { int implementation; };
/* etc. */