8

プログラム全体でデータのグローバル配列を共有したいとします。たとえば、次のようになります。

int lookup_indexes[] = { -1, 1, 1, -1, 2, 1, 1, -2, 2, 2, -1, 1, 1, 2 };

externC ヘッダー ファイルでのこの配列の正しい宣言はどれですか?

また、次のような配列はどうでしょうか。

int double_indexes[][5] = { { -1, 1, 1, -1, 1 }, { 2, -2, 2, 1, -1 } };

私のヘッダーファイルでこれを試しました:

extern int lookup_indexes[];
extern int double_indexes[][5];

しかし、これはコンパイラエラーになります:

water.h:5: error: array type has incomplete element type

私はそれを理解することはできません。

ありがとう、ボダ・シド。

4

2 に答える 2

6

このリンクでは、extern として使用される配列とサイズの問題と、それらを管理する方法について説明しています。

  1. 配列のサイズを含むコンパニオン変数を宣言し、配列が定義されている同じソース ファイルで (sizeof を使用して) 定義および初期化します。
  2. 定義とextern宣言で一貫して使用できるように、サイズのマニフェスト定数を定義します

  3. コードが明示的なサイズの指示なしで終了を判断できるように、配列の最後の要素で何らかのセンチネル値 (通常は 0、-1、または NULL) を使用します。
于 2010-08-06T06:51:56.720 に答える
2

あなたが投稿したコードは私には問題ないように見え、私のマシンでコンパイル (gcc -std=c99 -pedanticおよびgcc -std=c90 -pedantic) されます。これらの行をコピーして貼り付けましたか、それとも実際のヘッダーにタイプミスをした可能性がありますか?

エラーを引き起こす可能性のあるタイプミスの例 (純粋な推測):

extern int double_indexes[][];  /* forgot the 5 */
extern int double_indexes[5][]; /* [] and [5] swapped */
于 2010-08-06T07:24:09.437 に答える