Variable Length Array (VLA) in C ++ - Compilern
Wie wir bereits wissen, VLA (standardisiert in C99) sind nicht Bestandteil des Standards in C ++.
So ist der Code unten"illegal" imC ++:
void foo(int n) {
int vla[n];
for (int i = 0; i < n; ++i) {
vla[i] = i;
}
}
Trotzdem der Compiler g ++ undclang ++) akzeptiert der Code als gültige Syntax, wobei nur ein @ erzeugt wiWarnun im Fall-pedantic
flag is enable.
ISO C ++ verbietet Array variabler Länge "vla" [-Wvla]
Meine Fragen sind:
Warum akzeptiert der Compiler diese Deklaration?
Der Compiler kann ein Array mit der Länge @ nicht einfach ablehne[is-no-know-at-compile-time]
?
Gibt es eine Art von Kompatibilitätssyntaxregel, die befolgt werden muss?
Was sagt der Standard dazu?
Aus dem erzeugten Assembler-Code sehe ich, dass der Compiler in der Schleife im Stapel schreibt, wie ein normales Array, aber ich kann nichts über das Standardverhalten finden.