1

C 標準には次のように記載されています。

オブジェクトの識別子の宣言が暫定的な定義であり、内部リンケージがある場合、宣言された型は不完全な型であってはなりません

「宣言された型は不完全な型であってはならない」とはどういう意味ですか?

4

1 に答える 1

1

つまり、次のものを持つことは許可されていません。

static int arr[]; // This is illegal as per the quoted standard.
int main(void) {}

配列arrは暫定的に定義されており、不完全な型 (オブジェクトのサイズに関する情報がない) を持ち、内部リンケージも持っています (内部リンケージがあるstaticと言いarrます)。

以下は(ファイルスコープで)、

int i; // i is tentatively defined. Valid.

int arr[]; // tentative definition & incomplete type. A further definition 
           // of arr can appear elsewhere. If not, it's treated like
           //  int arr[] = {0}; i.e. an array with 1 element.
           // Valid.

有効です。

于 2013-09-11T05:54:18.607 に答える