Arrays variabler Länge in C: Konstanz und Standardkonformität untersuchen
Der folgende C-Codeausschnitt hat Fragen dazu aufgeworfen, ob er der Sprache entspricht Standard, insbesondere in Bezug auf konstante Ausdrücke:
int main() { int size = 10; int arr[size]; }
Im C-Standard (8.3.4/1) Die Größe eines Arrays muss ein „ganzzahliger konstanter Ausdruck“ sein. Im obigen Beispiel scheint der Größe diese Eigenschaft zu fehlen.
Arrays mit variabler Länge (VLA) und Kompilierungsstatus
Der Code wird erfolgreich mit gcc 4.8 und Clang 3.2 kompiliert weil beide Compiler Variable-Length-Arrays (VLAs) als Erweiterung in C unterstützen. Visual Studio CTP lehnt den Code jedoch mit einer Fehlermeldung ab, die darauf hinweist, dass die Größe Null ist. Dieses Verhalten steht im Einklang mit dem C-Standard, der keine Arrays variabler Größe zulässt.
Compilerwarnungen und Spracherweiterungen
Einige Compiler, wie z. B. gcc und clang, Geben Sie Warnungen aus, wenn Sie VLAs mit dem Flag -pedantic verwenden. Dieses Flag warnt vor potenziell nicht standardmäßigen Funktionen und weist darauf hin, dass der Code gegen den C-Standard verstößt. In diesem Fall macht das Fehlen einer konstanten Größe für das Array die Verwendung von VLA ungeeignet.
Ganzzahlige konstante Ausdrücke
Ganzzahlige konstante Ausdrücke gemäß dem C-Entwurfsstandard (5.19 .3) müssen bestimmte Bedingungen erfüllen. In diesem Fall qualifiziert die Größe, die mit einem Literal initialisiert wird, als integralen konstanten Ausdruck. Um jedoch dem C-Standard zu entsprechen, sollte „const“ oder „constexpr“ verwendet werden, um es explizit als solches zu deklarieren:
const int size = 10;
oder
constexpr int size = 10;
Schlussfolgerung
Während Arrays variabler Länge Flexibilität bieten, muss ihre Verwendung gegen die Einhaltung von Standards abgewogen werden. Compiler wie Visual Studio halten sich an den C-Standard und lehnen Code ab, der gegen seine Regeln verstößt. Durch das Verständnis des Konzepts integraler konstanter Ausdrücke und die Berücksichtigung von Spracherweiterungen können Entwickler sicherstellen, dass ihr Code sowohl die Funktionalitäts- als auch die Standardisierungsanforderungen erfüllt.
Das obige ist der detaillierte Inhalt vonEntsprechen Arrays variabler Länge in C dem Standard?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!