6
4

3 に答える 3

6

答えは1つあるということです。代わりに、ヘッダーファイルを使用する必要があります。構造体の定義をにコピーするtypedef struct BAR_{...} bar;test_foo.c、機能します。しかし、これは重複を引き起こします。動作するすべてのソリューションは、構造体の実装をでコンパイラーが使用できるようにする必要がありますtest_foo.c。この場合、これが適切であれば、ADTを使用することもできます。

于 2010-07-12T10:35:43.347 に答える
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(...);

この方法では構造体バー オブジェクトの存在のみを取得することに注意してください。test_foo.c のユーザーはオブジェクトの内容について何も知りません。

于 2010-07-12T10:39:51.097 に答える
1

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.

于 2010-07-12T10:33:17.683 に答える