C言語の構造体の定義についての質問です。
ファイルを AAA.c と BBB.c に分割してソースを書いています。
AAA.cで構造体_hogeを定義し、この構造体にはAAA.c内からしかアクセスできないようにしたいのですが、
そんなことは可能でしょうか。
イメージ的にはstaticをつければいけるような気がしますが、
以下の警告が出たので、良い案があればご教授ください。
環境:
Ubuntu 13.04
gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
AAA.c
BBB.c
C言語の構造体の隠蔽
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語の構造体の隠蔽
staticは実体定義の時に使うものなのでstructの構造体の型宣言ではエラーになります。
AAA.cにstruct _hogeの宣言があってもBBB.c から参照不能ですの気にしなくてよいです。
AAA.cにstruct _hogeの宣言があってもBBB.c から参照不能ですの気にしなくてよいです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
march3
Re: C言語の構造体の隠蔽
そうでしたか。softya(ソフト屋) さんが書きました:staticは実体定義の時に使うものなのでstructの構造体の型宣言ではエラーになります。
AAA.cにstruct _hogeの宣言があってもBBB.c から参照不能ですの気にしなくてよいです。
そもそもstaticなしでOKだとは。
たまにネット上でこういう書き方(staticで構造体の型宣言)をされているソースがあるので、
てっきり「staticで隠蔽しないとダメ」だと思い込んでました。
ありがとうございました。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語の構造体の隠蔽
それには理由があります。
【補足】
struct _hoge hoge; //関数外
だとhogeだけは外部から見えますが、struct _hogeは見えないので実質上は使えません。
static struct _hoge hoge; //とすれば外部から完全に見えなくなります。
明示的で念を入れた定義って感じでしょうが。
こういう情報は、変数のスコープで調べてみてください。
static struct _hoge{
int a;
char b;
} hoge; ← 変数も定義ならOKです。
static struct _hoge{ ← これだと型だけです。
int a;
char b;
};struct _hoge hoge; //関数外
だとhogeだけは外部から見えますが、struct _hogeは見えないので実質上は使えません。
static struct _hoge hoge; //とすれば外部から完全に見えなくなります。
明示的で念を入れた定義って感じでしょうが。
こういう情報は、変数のスコープで調べてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。