Heim >Backend-Entwicklung >C++ >Können Sie nicht konstante Variablen verwenden, um Array-Größen in C zu deklarieren?
Array-Größendeklaration mit nicht konstanten Variablen
Im Gegensatz zur weithin akzeptierten Vorstellung, dass Array-Größen in C konstante ganze Zahlen sein müssen, zeigen neuere Beobachtungen haben ergeben, dass einige Compiler diesbezüglich eine größere Flexibilität ermöglichen. Während der C-Standard vorschreibt, dass Array-Grenzen konstante Ausdrücke sein müssen, hat GCC eine Erweiterung eingeführt, die die Verwendung nicht konstanter Variablen in Array-Größendeklarationen ermöglicht.
Betrachten Sie das folgende Beispiel:
<code class="c++">int ArraySize = 5; int MyArray[ArraySize];</code>
In Standard-C würde dieser Code einen Compilerfehler erzeugen, da ArraySize keine Konstante ist. GCC kompiliert es jedoch gerne und ohne Probleme.
Um dieses Verhalten zu verstehen, muss man unbedingt anerkennen, dass die GCC-Erweiterung eine Abweichung vom C-Standard darstellt. Der Auszug aus „The C Programming Language“ von Bjarne Stroustrup besagt ausdrücklich, dass Array-Grenzen konstante Ausdrücke sein müssen.
Trotzdem bietet die GCC-Erweiterung eine praktische Möglichkeit, Arrays zur Laufzeit dynamisch zuzuweisen. Man könnte argumentieren, dass diese Flexibilität auf Kosten der Portabilität geht, da Code, der auf der GCC-Erweiterung basiert, möglicherweise nicht auf anderen kompatiblen C-Compilern kompiliert wird.
Wenn Portabilität ein Problem darstellt, bietet GCC Optionen zur Durchsetzung der Standardkonformität. Das Übergeben des Flags -pedantic während der Kompilierung führt zu einer Warnung für Deklarationen mit nicht konstanter Array-Größe und wird von -std=c 98 als Fehler behandelt. Bei diesen Optionen steht die strikte Einhaltung des C-Standards über der Laufzeitfreundlichkeit.
Das obige ist der detaillierte Inhalt vonKönnen Sie nicht konstante Variablen verwenden, um Array-Größen in C zu deklarieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!