Если я определяю простой массив:Объявление extern 2D-массив в C?
int tableint[][2] = {
{1, 2},
{2, 4},
{3, 9},
{4, 16},
{5, 25}
};
и код в тот же файл, как:
printf("Value = %d\n",sizeof(tableint));
printf("Value = %d\n",sizeof(tableint[0]));
printf("Num of rows = %d\n",sizeof(tableint)/sizeof(tableint[0]));
Выход такой, как ожидалось:
Value = 40
Value = 8
Num of rows = 5
Но если я перееду то же самое 'tableint' 2D-файл в отдельном файле и сохранить вышеприведенные операторы печати в предыдущем основном файле, но просто добавьте extern следующим образом:
extern int tableint[][2];
Я получаю сообщение об ошибке в следующей строке:
printf("Value = %d\n",sizeof(tableint));
как: недопустимого применения 'SizeOf' неполного типа "ИНТ [] [2]
Я любопытный знать, почему он работал, когда 2D-массив находился в одном файле, а не когда я переместил его в другой файл?
И, ошибка становится решена, если я определяю EXTERN как:
extern int tableint[5][2];
Есть ли способ, где мне не нужно упоминать количество строк в ехЬегпе здесь?
Есть другие варианты, например. 'extern tableint [] [2];' плюс некоторая функция, которая получает длину –
@ M.M .: Да, если OP не возражает потерять способность видеть размер как * постоянное выражение *. – AnT
Большое вам спасибо! –