30666 次
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 に答える