私は、短い、簡潔な.c
/.h
ファイルで定義された多数の別々のタイプのデータ(つまり、プロセス、ファイル、スレッド、関数など)を持っています。個々の部分の実装を終え、ユニット/コードカバレッジテストを終えたら、私は一緒に接続することに移りました。構造体へのポインタを持つ構造体:ベスト・アプローチ
現在の実装では、コード内のポインタ・ツー・parent- struct
(void *)
経由のポインタ、すなわち利用:私はいくつかのstruct
sはどのように複雑に起因するvoid *
のポインタを使用し、彼らはしません
struct typeB {
int B;
void *parent;
};
struct typeC {
int C;
void *parent;
};
struct typeA {
int a;
struct typeB *pB;
struct typeC *pC;
};
をvoid *
の代わりに実際のpointer-to-struct-type
を使用するとコンパイルできます。
typeB
とtypeC
はお互いに会話が必要な機能がいくつかありますが、まれです。また、struct
は、parent
のint a
について知る必要はありません。
私はparent struct
ポインタを削除し、シンプルに自分の関数プロトタイプ/定義をリファクタリングすべてなど、サブ構造にアクセス、引数として(struct typeA *)
を受け入れますが、いくつかの機能がちょうどtypeB
にアクセスする必要があるとして、それは、やり過ぎと思われる可能性があり/ typeC
構造とその要素。
(このサイトで頻繁に繰り返される "do not cast malloc()
"ルールと同様の)構造体のこのような組織を扱うためのデファクト(非カーゴカルトプログラミング)標準がありますか?
ありがとうございます。
フォワード宣言。それらを使用してください。 –
@ n.m。けっこうだ。それを超えて、ポインタと親構造体のロジックを使用することに重大な懸念がありますか?ありがとうございました。 – DevNull
継承を実装しようとしている場合は、オフセットが0になるように構造体の0番目の部分に親ポインタを配置してください。 –