Как часто вам приходится сталкиваться с конструкцией sizeof(array)/sizeof(array[0]) для определения размера массива? Очень надеюсь, что не часто, ведь на дворе уже 2024 год. В заметке поговорим о недостатках конструкции, откуда она берётся в современном коде и как от неё наконец избавиться.
Как размеры массивов C стали частью двоичного интерфейса библиотеки
8 мин
8.3KПеревод
Большинство компиляторов C позволяют получить доступ к массиву
Определение external_array может находиться в другой единице трансляции и выглядеть так:
Вопрос в том, что произойдет, если это отдельное определение изменится так:
Или так:
extern
с неопределёнными границами, например:extern int external_array[];
int
array_get (long int index)
{
return external_array[index];
}
Определение external_array может находиться в другой единице трансляции и выглядеть так:
int external_array[3] = { 1, 2, 3 };
Вопрос в том, что произойдет, если это отдельное определение изменится так:
int external_array[4] = { 1, 2, 3, 4 };
Или так:
int external_array[2] = { 1, 2 };
+25