すべての関数の外側での宣言を外部宣言(External Declaration)と言い,外部宣言によるオブジェクトや関数の定義を外部定義(External Eefinition)と言います。[C99, 6.9, 1 & 4]
記憶域クラス指定子 auto
と register
が使えない。[C99, 6.9, 2]
既に見た関数の定義は外部定義です。また,ファイル・スコープをもつオブジェクトの初期化は,そのオブジェクトの外部定義です。[C99, 6.9.2, 1]
/* Example 16.2 */ #include <stdio.h> int n = 1; int main(void) { int m = 2; printf("n = %d, m = %d\n", n, m); return 0; }
最初の変数 n
の宣言は,外部定義です。この変数はファイル・スコープを持つため,このソースファイル内では可視です。2つ目の変数 m
はブロック・スコープを持つので,外部定義ではありません。main
関数の本体,複合文内が有効範囲です。
実行結果です。
n = 1, m = 2
* 外部宣言されたオブジェクトを「外部変数」と呼ぶ本もある。