Проблема здесь в том, что const
в C не приводит к истинной константе.
Когда вы пишете const int i = 5
, вы получаете переменную только для чтения, а не константу.В C99 массив размером i
является массивом переменной длины (VLA).VLA доступны только для переменных, выделенных стеком, поэтому вы видите ошибку компиляции.
Если вам нужен массив с глобальной областью действия, вам следует переключиться на макрос.
#define ARRAY_SIZE 5
int arry[ARRAY_SIZE];
Это верно, потому что5
- это литерал, который является истинной константой.
На самом деле, даже для массива автоматического хранения (т. Е. Локальной переменной, выделенной в стеке) вы должны избегать VLA, поскольку они вызывают накладные расходы времени выполнения.