Я слышал, что легенды варьируются от «это должно быть необязательным, поскольку некоторые небольшие компиляторы должны быть в состоянии быть совместимыми с C11 без VLA», «чтобы это была ошибка на первом месте». У меня никогда не было ни одного правдивого и однозначного ответа на это. В конечном счете, я не верю, что у кого-то действительно есть такой, потому что причина (если предположить - и надеюсь - она есть) никогда не была раскрыта (насколько мои старые поиски шли).
Из главы 4 (стр. 13) Обоснования международного стандарта - Языки программирования - C 5.10 (2003)
Определяя соответствующие реализации в терминах программ, которые они принимают, Стандарт оставляет дверь для широкого класса расширений как части соответствующей реализации. Определяя как совместные размещенные, так и соответствующие автономные реализации, Стандарт признает использование C для написания таких программ, как операционные системы и приложения на основе ПЗУ, а также более традиционные размещенные приложения. Помимо этой двухуровневой схемы, для С не определено никакого дополнительного поднабора, поскольку Комитет С89 твердо убежден, что слишком большое количество уровней снижает эффективность стандарта .
Акцент мой. Обратите внимание, что это решение противоречит их собственному обоснованию. Еще одна вещь, сделанная необязательной. Теперь вы либо получаете __STDC_NO_VLA__
либо VLA поддержку. Это очень странное решение.