すべての関数の外側での宣言を外部宣言(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
* 外部宣言されたオブジェクトを「外部変数」と呼ぶ本もある。