C言語 | 構造体宣言 | 外部宣言 - extern

extern 記憶クラス指定子は、別の場所で定義される変数を宣言します。ファイルレベルの static は可視性を現在のソースファイルに限定します。

グローバル変数を参照する

関数の外側で宣言した名前はファイルスコープを持ち、その宣言以降で参照できます。定義が別の場所にある場合は extern を使います。

extern  変数名;

extern 宣言は記憶領域を確保せず、変数を初期化しません。

#include <stdio.h>

extern char *str;

int main(void) {
  printf("%s\n", str);
  return 0;
}

char *str = "Kitty on your lap";

extern はブロック内にも書けます。その場合、名前はそのブロック内でのみ見えます。

静的グローバル変数

static がないグローバル変数は、別のソースファイルから extern で宣言できます。グローバル変数を現在のファイルだけで使う場合は static を付けます。

#include <stdio.h>

static int iValue = 0xFF;

int main(void) {
  printf("iValue = %d\n", iValue);
  return 0;
}

実装の詳細を非公開にすると、識別子の衝突や別ファイルからの意図しないアクセスを避けられます。