Akzeptieren von Arrays mit variabler Länge (VLAs) in C trotz Nicht-Standard-Status
Obwohl C Arrays mit variabler Länge (VLAs) offiziell nicht unterstützt ), akzeptieren sowohl g- als auch clang-Compiler sie überraschenderweise als gültige Syntax. Dies wirft Fragen zum Verhalten des Compilers und zur Position des Standards zu VLAs auf.
Compiler-Akzeptanz
C-Compiler wie g und clang erlauben VLAs als nicht standardmäßige Erweiterung. Dies ist wahrscheinlich auf die historische Kompatibilität mit älteren C-Compilern zurückzuführen, die solche Deklarationen zuließen.
Standarddefinition
Der C-Standard verbietet VLAs gemäß der Grammatikregel in [dcl. Array]. Für die Angabe von Array-Größen sind nur konstante Ausdrücke zulässig. Im bereitgestellten Beispielcode ist n kein konstanter Ausdruck, wodurch die VLA-Deklaration gemäß dem Standard ungültig wird.
Implementierungsdetails
Obwohl VLAs nicht dem Standard entsprechen in C werden häufig durch die Zuweisung von Speicher auf dem Stapel und die Verwendung einer Schleife für den Zugriff auf Elemente implementiert. Dieses Verhalten ist jedoch vom Compiler abhängig und kann je nach Implementierung variieren.
Auswirkungen
Empfehlung
Für die Code-Portabilität und um die Einhaltung des C-Standards sicherzustellen, ist es Es wird empfohlen, die dynamische Speicherzuweisung (z. B. new[]) zum Erstellen von Arrays zu verwenden, deren Größe zur Kompilierungszeit nicht bekannt ist.
Das obige ist der detaillierte Inhalt vonWarum akzeptieren g und clang Arrays variabler Länge (VLAs) in C, obwohl der Standard sie verbietet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!