@aldexnotproger

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

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

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

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

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час