static
Cで、ファイル内の変数のスコープ制限としてキーワードを使用することについて疑問に思います。
私が見ているように、Cプログラムを構築する標準的な方法は次のとおりです。
- 関数と変数を定義するcファイルの束があり、スコープが。で制限されている可能性があります
static
。 - 他のcファイルが使用できるように、対応するcファイルの関数と場合によっては変数を宣言するhファイルの束があります。プライベート関数と変数はhファイルで公開されません。
- すべてのcファイルは個別にoファイルにコンパイルされます。
- すべてのoファイルはアプリケーションファイルにリンクされています。
static
とにかく変数がhファイルで公開されていない場合、gobalをとして宣言する2つの理由がわかります。
- 1つは読みやすさのためです。変数が他のファイルでアクセスされていないことを、私を含む将来の読者に知らせてください。
- 2つ目は、別のcファイルが変数を。として再宣言しないようにすることです
extern
。リンカは変数がとの両方extern
であることを嫌うと思いますstatic
。(ファイルが他の誰かが所有する変数を再宣言するという考えは嫌いですがextern
、それは大丈夫ですか?)
他の理由はありますか?
関数についても同じことが言えstatic
ます。プロトタイプがhファイルで公開されていない場合、他のファイルはとにかく関数を使用しない可能性があります。それでは、なぜそれを定義するstatic
のでしょうか。同じ2つの理由がわかりますが、それ以上はわかりません。