4

グローバル変数を static で宣言したかどうか、1 つ疑問があります。

file1.c

static int a=5;

main()
{
   func();
}

extern を使用して別の file2.c にアクセスできますか?

file2.c

func()
{
   extern int a;
   printf(a);
}

または static なしで宣言されたグローバル変数のみが extern を使用してアクセスできますか?

4

3 に答える 3

13

いいえ!
static変数のスコープを同じ翻訳単位に制限します。変数に内部リンケージ
staticを与え、この変数は、作成された翻訳単位を超えてアクセスできません。

異なるファイル間で変数にアクセスする必要がある場合は、staticキーワードを削除してください。

于 2012-11-05T07:50:37.110 に答える
2

これは、静的の 2 つの意味を誤解しているようです。

  • グローバル宣言の場合、静的は翻訳単位への制限を意味するため、静的はまさにあなたがやろうとしていることを防ぐことを意味します
  • ローカル変数の static はストレージ クラスです。つまり、変数は関数呼び出し間で値を保持します。グローバル変数 (モジュール レベル、つまり関数の外側) の場合、これは常に当てはまるため、static は必要ありません。
于 2012-11-05T07:56:44.543 に答える