我有两个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’
答案 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的定义。这种复制是否优于标题取决于你。