В С++ я попытался объявить глобальный массив некоторого размера. Я получил ошибку:
привязка массива не является целочисленной константой перед токеном «]»
Но когда я объявил массив того же типа в функции main()
, он работает нормально.
Почему здесь другое поведение?
int y=5;
int arr[y]; //When I comment this line it works fine
int main()
{
int x=5;
int arr2[x]; // This line doesn't show any error.
}
Изменить: многие предполагают, что этот вопрос является дубликатом Привязка массива ошибок не является целочисленной константой перед токеном ']'. Но этот вопрос не отвечает, почему существует другое поведение.
main
это нелегально, там используется расширение VLA. - person Jarod42   schedule 10.03.2020main
принимается вашим компилятором: вы используете расширение компилятора, которое позволяет компилировать VLA, даже если они не поддерживаются стандартом C++. - person Algirdas Preidžius   schedule 10.03.2020y
иx
какconst
? Вам нужно изменить значениеy
илиx
? Надеюсь, что нет, потому что возникает много вопросов о том, насколько большими должны бытьarr
иarr2
, особенно в отношении порядка инициализации. (Подсказка: они должны быть константами) - person Wyck   schedule 10.03.2020--std=c++17
(или--std=c++11
, если это более старый компилятор), и компиляция завершится ошибкой. - person einpoklum   schedule 10.03.2020// This line doesn't show any error
-- Да, это так. (rextester.com/NXZDT64108) - person PaulMcKenzie   schedule 10.03.2020