开发者

How to declare extern typedef struct?

开发者 https://www.devze.com 2023-01-07 10:40 出处:网络
I have two c files, foo.c with the functionality and test_foo.c which test the functions of foo.c. I开发者_运维技巧s there a way to access the struct typedef BAR I defined in foo.c in test_foo.c with

I have two c files, foo.c with the functionality and test_foo.c which test the functions of foo.c.

I开发者_运维技巧s 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’


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.


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.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号