Я просмотрел их, и они не отвечают на мой вопрос:
объект с переменным размером не может быть инициализирован
Ошибка компиляции C: «Объект переменного размера не может быть инициализирован»
Ошибка: Объект переменного размера не может быть инициализирован. Но почему?
Я пытаюсь написать достаточно переносимый c
код:
int main ()
{
const int foo=13;
int bar[foo]={0};
return 0;
}
я получаю ошибку объекта переменного размера, возможно, не инициализирован
при компиляции как c
] код, используя:
И если я скомпилирую его как c
в VS2008, я получу немного другую ошибку C2057: ожидаемое константное выражение
Я понимаю, что здесь c
компилятор кода не распознает const int foo=13;
как истинную константу; например, у нас может быть
void a(int fool)
{
const int foo=fool;
int bar[foo]={0};
}
Я также понимаю, что в отличие от компиляторов gcc, компилятор VS2008не имеет концепции массивов переменной длины C99. И что MS, по-видимому, не упомянула о будущей поддержке.
И тем не менее, компиляция кода cpp
с компиляторами gccили MSсовершенно другая/умнее ?!
А также что я не понимаюотносительно компилятора кода gccc
:
(Примечание: в этом последнем случае компиляция кода MSc
не удалась; последовательно, как и с int bar[foo]={0};
)