暫定定義 とは、ストレージ・クラス指定子と初期 化指定子を持たない外部データ宣言です。変換単位の終りに達しても、その 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++ は、暫 定定義の概念をサポートしていません。ストレージ・クラス指定子のない外部データ宣 言は常に定義です。