Heim > Backend-Entwicklung > C++ > Warum akzeptieren g und clang Arrays variabler Länge (VLAs) in C, obwohl der Standard sie verbietet?

Warum akzeptieren g und clang Arrays variabler Länge (VLAs) in C, obwohl der Standard sie verbietet?

Patricia Arquette
Freigeben: 2024-12-30 09:06:17
Original
152 Leute haben es durchsucht

Why Do g   and clang   Accept Variable Length Arrays (VLAs) in C   Despite the Standard Prohibiting Them?

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

  • VLAs in C gelten als Compiler-Erweiterungen und sollten nicht als zuverlässig angesehen werden .
  • Code, der VLAs enthält, kann je nach verwendetem Compiler ein unterschiedliches Verhalten aufweisen.
  • Das ist so Es wird nicht empfohlen, VLAs in Code zu verwenden, der auf verschiedene C-Compiler portierbar sein soll.

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage