@aldexnotproger

Почему в c++ можно задавать статический массив переменной длины?

Почему это допустимо? Разве память для массива не выделяется во время компиляции? И почему sizeof корректно определяет размер mas (если, например, ввести n = 5, то sizeof(mas) будет равен 20 байтам при sizeof(int) равном 4 байтам в моей системе)?
6184faff35ec4703781909.png
Я компилирую этот код с помощью MinGW x64
  • Вопрос задан
  • 281 просмотр
Решения вопроса 1
@res2001
Developer, ex-admin
Это потому что вы компилируете с помощью gcc.
Вообще в стандарте С++ VLA (variable length array) нет в принципе и это ошибка.
Но VLA есть в C99 и далее. А gcc с параметрами по умолчанию разрешает использовать расширения, в т.ч. и VLA.
Стоит включить более строгое соответствие стандарту, как вы получите ошибку и не собираемый код.

Рекомендую это (включать строгое соответствие стандарту) делать в своих проектах всегда. А так же включать вывод всех предупреждений (-Wall -Wextra) и пытаться добиваться сборки без предупреждений.
Наиболее "продвинутые" переводят все предупреждения в ошибки, что бы программа в принципе не собиралась с любыми предупреждениями. Это то же делается соответствующей опцией компилятора.
Часто в таких случаях приходится некоторые предупреждения ставить в игнор, но это делается всегда осознанно, с пониманием для чего это нужно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы