この種のアクセス制御は、C++で直接実行できます。Cでは実行できません。アクセスするはずのないメンバーにアクセスしないという規律を使用する必要があります。
部分的な代替手段があります。プライベート構造を不透明なポインターにし、データを取得する方法を知っている関数を使用することができb
ます。その場合、上位層のコードは下位層のデータ構造の内部を見る必要はありません。
upper.h
#include "lower.h"
struct Upper
{
int p;
struct Lower *q;
int r;
};
lower.h
struct Lower *lower_new(void);
void lower_free(struct Lower *);
int lower_b(struct Lower *q);
b
上位構造のインスタンスで下位構造のフィールドを必要とするコードは、次のu
ように記述します。
struct Upper u = { ... };
int x = lower_b(u.q);
そのスキームをあなたのために働くものに変える方法はたくさんあります。下位構造のパブリックヘッダーは、構造の内容をまったく定義していないことに注意してください。これは、ソースコードに隠された実装の詳細です—<code>lower.cおそらく。