仮定義
宣言構文:インデックス への移動
ANSI C 規格では,仮定義という新しい概念が導入されています。記憶クラス指定子と初期化子のないすべての外部データ宣言は仮定義とみなされます。宣言された識別子がその後で定義されている場合,仮定義は extern 記憶クラス指定子が存在するかのように処理されます。言い換えると,仮定義は単なる参照宣言になるということです。
翻訳単位が終了したにもかかわらず,識別子の初期化子を伴う定義が 1 つも現れない場合,仮定義は完全な定義となり,定義されたオブジェクトはそのオブジェクトのために予約された初期化されていない(ゼロで埋められた)領域を持ちます。次に例を示します。
int x; int x; /*正しい,x のコピーは 1 つだけ予約される */ int y; int y = 4; /* 正しい,y は 4 に初期化される */ int z = 5; int z = 6; /* 正しくない,両方とも初期化定義 */
ANSI C とは異なり,C++ には仮宣言という概念がありません。すなわち,記憶クラス指定子のない外部データ宣言は,すべて定義になります。