如何声明extern typedef结构?

时间:2010-07-12 10:29:54

标签: c extern

我有两个c文件,foo.c及其功能和test_foo.c,用于测试foo.c的功能。

有没有办法访问我在test_foo.c中的foo.c中定义的struct typedef BAR而不使用头文件?到目前为止,我能够避免使用h文件,因此整个程序将由foo.c组成。感谢。

foo.c   
typedef struct BAR_{...} bar;
BAR *bar_new(...) {..}

test_foo.c
extern BAR *bar_new(...)

error: expected declaration specifiers or ‘...’ before ‘BAR’

3 个答案:

答案 0 :(得分:6)

答案是有一个,你应该使用头文件。 您可以将结构typedef struct BAR_{...} bar;的定义复制到test_foo.c中,它将起作用。但这会导致重复。 每个有效的解决方案都必须使test_foo.c中的编译器的实现可用。 如果这种情况适合您,您也可以使用ADT。

答案 1 :(得分:4)

删除typedef。

在foo.c中:

struct bar 
{
    ...
};

struct bar *bar_new(....)
{
    return malloc(sizeof(struct bar));
}

在test_foo.c中:

struct bar;

struct bar *mybar = bar_new(...);

请注意,您只能以这种方式获得struct bar对象的存在,test_foo.c中的用户对该对象的内容一无所知。

答案 2 :(得分:1)

您需要在test_foo.c中提供BAR的定义。这种复制是否优于标题取决于你。