可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have two c files, foo.c with the functionality and test_foo.c which test the functions of foo.c.
Is there a way to access the struct typedef BAR
I defined in foo.c in test_foo.c without using a header file? So far, I was able to avoid a h file so that the whole program would consist of foo.c. Thanks.
foo.c typedef struct BAR_{...} bar; BAR *bar_new(...) {..} test_foo.c extern BAR *bar_new(...)
error: expected declaration specifiers or ‘...’ before ‘BAR’
回答1:
The answer is that there is one, and you should use an header file instead. You can copy the definition of the struct typedef struct BAR_{...} bar;
into test_foo.c
and it will work. But this causes duplication. Every solution that works must make the implementation of struct available to the compiler in test_foo.c
. You may also use an ADT if this suits you in this case.
回答2:
Drop the typedef.
In foo.c:
struct bar { ... }; struct bar *bar_new(....) { return malloc(sizeof(struct bar)); }
In test_foo.c:
struct bar; struct bar *mybar = bar_new(...);
Note that you only get the existence of a struct bar object in this way, the user in test_foo.c does not know anything about the contents of the object.
回答3:
You would need to supply the definition of BAR in test_foo.c. Whether that duplication is preferable to having a header is up to you.