Ist „int size = 10;“ ein konstanter Ausdruck?
Der Codeausschnitt:
int main() { int size = 10; int arr[size]; }
wirft Fragen dazu auf, ob das Variable-Length-Array (VLA) eine gültige C-Funktion ist.
Die Perspektive des Standards
Der C-Standard (8.3.4/1) schreibt diese Anordnung vor Größen sind ganzzahlige konstante Ausdrücke, was „Größe“ anscheinend nicht ist. Compiler wie GCC und Clang akzeptieren diesen Code, da sie VLAs als Erweiterung in C unterstützen. Visual Studio hält sich an den Standard und lehnt ihn ab.
Arrays mit variabler Länge
VLAs sind eine C99-Funktion, die Arrays mit dynamisch bestimmten Größen ermöglicht. GCC und Clang erweitern diese Funktionalität auf C. VLAs sind jedoch nicht Teil des C-Standards und die Verwendung des Flags -pedantic in GCC/Clang führt zu Warnungen oder Fehlern.
Integrale konstante Ausdrücke
Gemäß der Im C-Standardentwurf (5.19/3) ist ein ganzzahliger Konstantenausdruck ein Ausdruck eines ganzzahligen oder unbegrenzten Aufzählungstyps, der implizit in a konvertiert wird prvalue, der die Kriterien für einen zentralen konstanten Ausdruck erfüllt.
„Größe“ zu einem konstanten Ausdruck machen
Um dem Standard zu entsprechen, muss „Größe“ als an deklariert werden integraler konstanter Ausdruck. Dies kann erreicht werden durch:
Fazit
GCC und Clangs Akzeptanz von VLAs sind eine Erweiterung und keine Standardfunktion in C. Die Ablehnung von Visual Studio entspricht dem Standard. Um VLA-ähnliche Funktionen in Standard-C zu verwenden, wird empfohlen, const oder constexpr zu verwenden, um Array-Größen zu integralen konstanten Ausdrücken zu machen.
Das obige ist der detaillierte Inhalt vonIst „int size = 10;' ein gültiger konstanter Ausdruck für die Array-Größenbestimmung in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!