我现在可以使用struct来定义struct但是如何声明函数或struct依赖于它们?
test.h
extern struct foo;
typedef int (*test)(FOO *f);
typedef struct foo
{
char a;
test *t;
} FOO;
int haha(FOO *f) { return 0;}
typedef struct foo
{
char a;
test *t;
} FOO;
test.c的
int main() {FOO e; return 0; }
答案 0 :(得分:3)
问题是除非您具有实际结构的完整定义,否则无法定义结构变量(或其他结构中的成员)。前向声明不是完整定义。如果你有一个前向声明,你可以声明的是指向结构的指针。
这意味着您所能做的就像是
typedef struct bar BAR; // Forward declaration of the structure and type-alias definition in one line
typedef struct foo FOO; // Forward declaration of the structure and type-alias definition in one line
struct foo {
char a;
BAR *b; // Define a *pointer* to the BAR structure
FOO *s; // Define a *pointer* to the FOO structure
};
这样做是因为要声明一个指向结构的指针,编译器只需要知道结构存在,它就不需要完整的结构定义。为此,您只需要正常的前向声明。
另请注意,在递归引用结构时,也需要指针,因为完整定义在结束括号之前是不完整的。