Heim >Backend-Entwicklung >C++ >Warum akzeptieren C-Compiler VLAs trotz Standardverbot?

Warum akzeptieren C-Compiler VLAs trotz Standardverbot?

Barbara Streisand
Barbara StreisandOriginal
2024-12-26 04:58:13295Durchsuche

Why Do C   Compilers Accept VLAs Despite Standard Prohibition?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn