Secondo this answer, in cui si afferma:Perché le funzioni C++ possono creare matrici di lunghezze variabili?
Il compilatore conosce la dimensione del tipo int e quindi in grado di generare l'istruzione assembler giusto che riserverà uno spazio sufficiente sulla pila al fine di lasciare foo vivere lì.
un compilatore deve conoscere la dimensione che una funzione occuperà nello stack per implementarlo.
Quindi, perché questo codice viene compilato?
int f(int n)
{
int x[n];
}
int main()
{
f(3);
f(5);
//etc
}
x
è un array di interi, ma le sue dimensioni non è costante, può cambiare in qualsiasi momento la funzione viene richiamata.
Cosa mi manca qui?
Compilalo di nuovo con '-pedantic'. – chris
"erw.cpp: nella funzione 'int f (int)': erw.cpp: 3: 12: avviso: ISO C++ proibisce l'array di lunghezza variabile 'x' [-Wvla]" - @chris: grazie, questo ha senso adesso. – corazza
possibile duplicato di [Nei libri C++, l'array associato deve essere un'espressione costante, ma perché funziona il seguente codice?] (Http://stackoverflow.com/questions/5947661/in-c-books-array-bound-must-be -constant-expression-but-why-the-following-cod) –