gcc жалуется: объект переменного размера не может быть инициализирован

Я просмотрел их, и они не отвечают на мой вопрос:

объект с переменным размером не может быть инициализирован

Ошибка компиляции C: «Объект переменного размера не может быть инициализирован»

Ошибка: Объект переменного размера не может быть инициализирован. Но почему?


Я пытаюсь написать достаточно переносимый cкод:

int main () 
{
    const int foo=13;
    int bar[foo]={0};
    return 0;
}


я получаю ошибку объекта переменного размера, возможно, не инициализированпри компиляции как c] код, используя:

  • gcc 4.3.4
  • arm-linux-gnueabi-gcc 4.4.5

И если я скомпилирую его как 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};)

7
задан Community 23 May 2017 в 11:46
поделиться