1

gcc 4.7.2-3があり、次のエラーが発生します。

main.c:5:6:エラー:「fname」に配列サイズがありません</ p>

main.c:6:6:エラー:「lname」に配列サイズがありません</ p>

これを初期化するとき:

int fname[];
int lname[];

これは、より高いバージョンのgccを使用して使用できなくなりましたか?私は以前にこれを使用したことがあると確信しているので...

編集:私がこれを覚えていると言う理由は、私がここでそれを見ているからです:http: //h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQTLTBTE/DOCU_046.HTM

4

4 に答える 4

2

すぐに初期化する場合は、サイズのない配列のみを宣言できます

int myarr[] = {1, 2, 3};

またはそれが構造体の最後のメンバーである場合

struct foo {
  int something;
  int somethingelse;
  char emptyarr[];
};
于 2013-01-09T18:26:54.783 に答える
1

長さゼロの配列は、GNU C 拡張または C99 で導入された柔軟な配列メンバーのいずれかです (これは C++ コンパイラもたまたまサポートしており、C++ 標準に含まれているかどうかはわかりません)。どちらの場合でも、それらは構造体の最後のメンバーとしてのみ許可され、それ以外の場合は許可されず、意味もありません。

あなたが参照しているドキュメントは、「空の」配列を使用または表示しています。「空の」配列の配列の減衰を混同しています。

于 2013-01-09T18:32:42.327 に答える
0

どのコンパイラでもこれが可能だったとは思いません。コンパイル時に配列サイズを知っておく必要があります。おそらくすぐに初期化を行っていました:

int fname[] = { 1, 2, 3};

このようにして、コンパイラはサイズを導き出すことができます。

編集:ああ、「C」タグを逃した。:)C++では違法のようですが。

于 2013-01-09T18:22:19.423 に答える