Как правильно записать объявления массивов экстерна (и двойные массивы) в заголовочных файлах C?

Предположим, что я хочу совместно использовать глобальный массив данных через мою программу, например:

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

Каково корректное extern объявление для этого массива в заголовочном файле C?

Также что относительно массива как это:

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

Я не могу понять это.

Спасибо, Boda Cydo.

8
задан bodacydo 6 August 2010 в 06:29
поделиться

2 ответа

В этой ссылке обсуждаются проблемы с массивами и размерами, используемыми в качестве экстернов, и способы управления ими.

  1. Объявить сопутствующую переменную, содержащую размер массива, определенный и инициализированный (с sizeof) в том же исходном файле, в котором определен массив
  2. определить константу манифеста для размера, чтобы ее можно было последовательно использовать в определении и объявлении extern

  3. Используйте некоторое значение sentinel (обычно 0, -1 или NULL) в последнем элементе массива, чтобы код мог определить конец без явного указания размера
6
ответ дан 5 December 2019 в 20:12
поделиться

Код, который вы опубликовали, мне нравится и компилируется ( gcc -std = c99 -pedantic и gcc -std = c90 -pedantic ) на моей машине. Скопировали ли вы эти строки или вы допустили опечатку в своем реальном заголовке?

Примеры опечаток, которые могут вызвать вашу ошибку (чистое предположение):

extern int double_indexes[][];  /* forgot the 5 */
extern int double_indexes[5][]; /* [] and [5] swapped */
2
ответ дан 5 December 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: