仮定義 は、ストレージ・クラス指定子も初期化指定子も持たない任意の外部データ宣言です。
仮定義は、変換単位の最後に到達しても ID の定義が初期化指定子とともに表示されない場合は、完全定義になります。
この場合、コンパイラーは、定義済みオブジェクトに未初期化スペースを予約します。
次のステートメントは、標準定義と仮定義を示しています。
int i1 = 10; /* definition, external linkage */ static int i2 = 20; /* definition, internal linkage */ extern int i3 = 30; /* definition, external linkage */ int i4; /* tentative definition, external linkage */ static int i5; /* tentative definition, internal linkage */ int i1; /* valid tentative definition */ int i2; /* not legal, linkage disagreement with previous */ int i3; /* valid tentative definition */ int i4; /* valid tentative definition */ int i5; /* not legal, linkage disagreement with previous */
C++ は、仮定義の概念をサポートしていません。つまり、ストレージ・クラス指定子のな
い外部データ宣言は常に 1 つの定義と見なされます。
関連参照