const
на самом деле не означает «это значение является постоянным», но «вы не можете изменить это значение».
При этом должно быть понятно, почему последний код не компилируется, нобывший не может.Даже если вы зададите для него значение по умолчанию 5
, это не гарантирует это пять, и поэтому у вас нет константы, поэтому вы не можете создать массив.Но тип по-прежнему const
, поэтому вы не можете его изменить.
Тем не менее, начиная с C99, вы можете иметь массивы переменной длины, так что на самом деле все будет в порядке.(Это не хорошо в C ++.) Ваш компилятор кажется слишком старым, чтобы поддерживать C99.(Я настоятельно рекомендую использовать последнюю версию GCC.)