Heim >Backend-Entwicklung >C++ >Ist „int size = 10;' ein gültiger konstanter Ausdruck für die Array-Größenbestimmung in C?

Ist „int size = 10;' ein gültiger konstanter Ausdruck für die Array-Größenbestimmung in C?

Linda Hamilton
Linda HamiltonOriginal
2024-12-09 21:15:10499Durchsuche

Is `int size = 10;` a Valid Constant Expression for Array Sizing in C  ?

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:

  • Verwendung von const: const int size = 10;
  • Verwendung von constexpr: constexpr int size = 10;

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!

Stellungnahme:
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