Почему мне разрешено использовать переменную const, определенную как размер массива в C?

Когда я запускаю следующий код, он отлично работает для C:

#include int main(void) { const int x=5; char arr[x]; printf("%d",sizeof(arr)); } 

Но не только я прочитал до того, что константные переменные const не являются real константами (поэтому они не могут использоваться в case условия switch-case ), но следующая ссылка от IBM подтверждает это ( IBMLINK ) и говорит:

  const int k = 10; int ary[k]; /* allowed in C++, not legal in C */ 

Почему же мне разрешено использовать переменную const переменной C в качестве размера массива без каких-либо ошибок?

c99 поддерживают массивы переменной длины, но c90 не поддерживает массивы переменной длины, вы можете увидеть это более четко, если вы используете gcc и пытаетесь скомпилировать эти аргументы:

 gcc -std=c89 -pedantic 

это даст вам следующее предупреждение:

 warning: ISO C90 forbids variable length array 'y' [-Wvla] 

но если вы скомпилируете с помощью c99 то это прекрасно:

 gcc -std=c99 -pedantic 

Как указывал Джон Боде с 2011 года, стандартные массивы переменной длины ( VLA ) теперь являются необязательными. Вот статья доктора Доббса о VLA, а также ссылка на документы gcc как указал Уэйн Конрад.

  • Как объявить массив в Python?
  • Каков правильный способ инициализации массива с фиксированной длиной?
  • Проверьте, существует ли значение в массиве Postgres
  • Добавление элементов в массив Swift для нескольких streamов, вызывающих проблемы (поскольку массивы не являются streamобезопасными) - как мне обойти это?
  • Общие правила передачи / возврата ссылки на массив (не указатель) на / из функции?
  • Привязать к переменной массива bash косвенно, динамически сконструированным именем переменной
  • Являются ли массивы Java максимальным?
  • Ошибка создания общего массива
  • SwingPropertyChangeSupport для динамического обновления JTextArea
  • Просмотр массива в отладчике Visual Studio?
  • Многомерный массив vs
  • Interesting Posts

    Как установить гостевые дополнения VirtualBox для CentOS 7?

    Как настроить начальную страницу для отладки в приложении ASP.NET MVC?

    Как определить, какой HD участвует в средстве просмотра событий?

    Как работает Connectify?

    Являются ли имена таблиц в регистре MySQL чувствительными к регистру?

    Как хранить DNS-кеш в случае отказа DNS-сервера?

    Как создать задание cron с помощью Bash автоматически без интерактивного редактора?

    Windows 8 Pro, права на переучивание Windows 7 Pro и права на обновление Windows 10

    Ноутбук работает спонтанно

    Как получить текущее имя пользователя из службы Windows в .NET?

    Запуск файла bat при запуске в качестве администратора в Windows 7

    net :: ERR_INCOMPLETE_CHUNKED_ENCODING только в Chrome

    «Наблюдаемое поведение» и свобода компилятора для исключения / преобразования элементов кода c ++

    Java Generics Подстановочные знаки с несколькими classами

    Совместное использование интернета через Ethernet и WiFi

    Давайте будем гением компьютера.