Heim >Backend-Entwicklung >C++ >Warum akzeptieren C-Compiler VLAs trotz Standardverbot?
VLA in C: Compiler-Akzeptanz trotz nicht standardmäßiger Funktion
Variable Length Arrays (VLAs), eingeführt in C99, werden nicht offiziell unterstützt in C. Dennoch erlauben Compiler wie g und clang überraschenderweise VLA-Deklarationen, generieren jedoch Warnungen, wenn das Flag -pedantic aktiviert ist.
Compiler-Akzeptanz
Die Akzeptanz von VLAs durch den Compiler hängt davon ab aus dem Festhalten an einem Erbe des C-Compiler-Verhaltens. Insbesondere GCC gewährleistet die Kompatibilität mit älteren C-Compilern, die VLAs zuließen.
Standardimplikationen
Trotz der Zustimmung des Compilers verbietet C ausdrücklich VLAs in der Array-Deklarationsgrammatik [dcl.array]: Als Array-Größenspezifizierer können nur konstante Ausdrücke verwendet werden. In Ihrem Beispiel erfüllt n diese Anforderung nicht.
Compiler-Implementierung
Obwohl der Standard VLAs nicht zulässt, tun Compiler, die sie unterstützen, dies durch Erweiterungen. Die spezifischen Implementierungsdetails variieren je nach Compiler. Im Fall von g und clang werden VLAs beispielsweise als normale Arrays auf dem Stapel implementiert, wobei ihre Größen während der Laufzeit dynamisch zugewiesen werden.
Das obige ist der detaillierte Inhalt vonWarum akzeptieren C-Compiler VLAs trotz Standardverbot?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!