Heim  >  Artikel  >  Backend-Entwicklung  >  Warum können Array-Größen nicht mit „const int“-Variablen in C initialisiert werden?

Warum können Array-Größen nicht mit „const int“-Variablen in C initialisiert werden?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 05:29:02624Durchsuche

Why Can't Array Sizes Be Initialized with `const int` Variables in C  ?

Warum wird die Array-Größenbeschränkung mit Const Int manchmal erzwungen?

In C können Array-Größen mithilfe konstanter Ganzzahlen angegeben werden. Diese Flexibilität weist jedoch Einschränkungen auf, wie die folgenden Beispiele zeigen:

<code class="cpp">const int size = 2;
int array[size] = {0}; // Allowed</code>
<code class="cpp">int a = 2;
const int size = a;
int array[size] = {0}; // Compile Error</code>

Warum wird das erste Beispiel erfolgreich kompiliert, während das zweite fehlschlägt?

Erklärung

Der C-Standard schreibt diese Array-Größenbeschränkungen basierend auf der Art des Ausdrucks vor, der zum Initialisieren der Größe verwendet wird.

Konstanter Ausdruck

Im ersten Beispiel ist const int size = 2; ist ein konstanter Ausdruck, da der Wert der Größe zum Zeitpunkt der Kompilierung bekannt ist. Da der Compiler die Array-Größe kennt, kann er beim Kompilieren den notwendigen Speicher zuweisen.

Nichtkonstanter Ausdruck

Im zweiten Beispiel ist const int size = a; ist kein konstanter Ausdruck, da der Wert von a erst zur Laufzeit bestimmt wird. Dies verhindert, dass der Compiler die Array-Größe während der Kompilierung kennt, wodurch es unmöglich wird, zur Kompilierungszeit Speicher zuzuweisen.

Unveränderlichkeit ist irrelevant

Beachten Sie, dass das zweite Beispiel immer noch einen effektiv konstanten Wert für die Größe hat , aber dies wird vom Compiler nicht berücksichtigt. Die Regeln konzentrieren sich auf die Art des verwendeten Ausdrucks und int a = 2; verwendet veränderliche Variablen, was ihn zu einem nicht konstanten Ausdruck macht.

Komplexität der Flussanalyse

Um die Laufzeitinitialisierung für die Zuweisung zur Kompilierungszeit zu ermöglichen, wäre eine Flussanalyse erforderlich. Der Compiler müsste zwischen Ausdrücken wie:

<code class="cpp">int a = 2;
const int size = a;</code>

und

<code class="cpp">int a = foo();
const int size = a;</code>

unterscheiden, wobei der Größenausdruck identisch ist, der tatsächliche Wert jedoch vom Laufzeitverhalten abhängt. Diese Komplexität wird vom C-Komitee als unnötig erachtet.

Das obige ist der detaillierte Inhalt vonWarum können Array-Größen nicht mit „const int“-Variablen in C initialisiert werden?. 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