14

グローバル変数のデフォルトのストレージ クラスは何ですか?

私が見つけたウェブで検索中に、いくつかのサイトはそれがstatic. ただし、静的とは内部リンケージを意味し、変数はファイル スコープ外では使用できません。つまり、他のオブジェクト ファイルでは使用できません。ただし、 のような宣言を使用して他のファイルにアクセスすることはできますextern int i

staticまた、グローバル変数に明示的に言及すると、ファイル スコープ外では使用できません。

では、グローバル変数の正しいデフォルトのストレージ クラスは何ですか?

4

2 に答える 2

17

デフォルトの保存期間は静的ですが、デフォルトのリンケージは外部です。少し混乱しているのはあなただけではありません。 C Book (常に良いリファレンス) は次のように述べています。

「おそらく、これらのさまざまな要素間の相互作用が複雑で紛らわしいことに気付くでしょう。それは、それらが実際にあるからです!」

その引用を含むセクションDeclarations, Definitions and Accessibilityには、役立つ表 (8.1) があります。最後の行は、あなたが興味を持っているケースを説明しています。それが指摘するように、ストレージ クラス指定子のないデータ オブジェクトには、外部リンケージと静的期間があります。

于 2010-07-19T14:25:18.113 に答える
16

一般に「グローバル」変数として知られているものには、「デフォルトのストレージ クラス」はありません。変数が名前空間スコープで定義されている場合、変数には常に静的ストレージ期間があります。それを変更する方法はありません。そのため、ここでは「デフォルト」という考えは適用されません。(そして、保存期間はそれが正しく呼ばれるものです。)

名前空間スコープで定義された変数にキーワードを適用すると、その保存期間staticには影響しません- それはすでに静的であり、静的なままです - しかし、それはリンケージに影響します。このキーワードは、そのような変数のリンケージを外部 (デフォルト) から内部に変更します。リンケージは別の概念であり、保存期間とは実質的に無関係です。static

于 2010-07-19T14:37:12.763 に答える