如何声明extern结构?

时间:2016-10-24 09:46:28

标签: c function struct typedef

我现在可以使用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; }

1 个答案:

答案 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
};

这样做是因为要声明一个指向结构的指针,编译器只需要知道结构存在,它就不需要完整的结构定义。为此,您只需要正常的前向声明。

另请注意,在递归引用结构时,也需要指针,因为完整定义在结束括号之前是不完整的。