Heim > Backend-Entwicklung > C++ > Hauptteil

Warum kann ich eine Array-Größe nicht mit einer „const int'-Variablen in C initialisieren?

Susan Sarandon
Freigeben: 2024-10-28 21:17:30
Original
931 Leute haben es durchsucht

Why Can't I Initialize an Array Size with a `const int` Variable in C  ?

Das schwer fassbare Dilemma der Array-Größeninitialisierung mit const int

Im Bereich C stellt die Verwendung von Konstanten für die Array-Größeninitialisierung häufig Probleme dar ein rätselhaftes Dilemma. Während einige Situationen diese Praxis problemlos zulassen, führen andere zu kryptischen Kompilierungsfehlern.

Beachten Sie die folgenden Codeausschnitte:

<code class="cpp">const int size = 2;
int array[size] = {0};</code>
Nach dem Login kopieren

In diesem Beispiel lässt der Compiler problemlos die Deklaration eines Arrays mit a zu Größe, die durch die konstante Variable „size“ angegeben wird. Der Grund liegt in der Art des Initialisierungsausdrucks für „Größe“. Es handelt sich um einen konstanten Ausdruck, das heißt, er kann vollständig zur Kompilierungszeit ausgewertet werden. Dies ermöglicht es dem Compiler, die genaue Größe des Arrays während der Kompilierung zu bestimmen, was die Speicherzuweisung entsprechend erleichtert.

Im Gegensatz zum oben Gesagten sehen Sie sich dieses Snippet an:

<code class="cpp">int a = 2;
const int size = a;
int array[size] = {0};</code>
Nach dem Login kopieren

Hier der Compiler bekommt einen Wutanfall und beklagt einen „Kompilierungsfehler“. Der Kern des Problems liegt in dem Ausdruck, der zur Initialisierung von „Größe“ verwendet wird. Es handelt sich um eine nicht konstante Variable ('a'). Dadurch wird der Ausdruck in den Bereich der nicht konstanten Ausdrücke verbannt. Daher kann der Compiler die Größe des Arrays zur Kompilierungszeit nicht ermitteln.

Dieses Verhalten ist auf eine grundlegende Entscheidung des C-Standardisierungsausschusses zurückzuführen. Der Ausschuss gab Einfachheit und Deutlichkeit Vorrang vor Flexibilität. Die Implementierung des Letzteren würde eine komplexe Flussanalyse erfordern und zwischen nicht veränderbaren Ausdrücken wie „const int size = a;“ unterscheiden. und wirklich nicht konstante Ausdrücke wie „const int size = foo();“. Eine solche Komplexität wurde als unerwünscht erachtet.

Daher bleibt die Regel bestehen: Array-Größen können nur mit konstanten Ausdrücken initialisiert werden. Dadurch wird sichergestellt, dass der Compiler die Größe des Arrays eindeutig bestimmen kann, was eine vorhersehbare Speicherzuweisung und eine reibungslose Kompilierung gewährleistet. Behalten Sie dieses Gebot immer im Hinterkopf, wenn Sie sich in die Welt der Initialisierung der Array-Größe wagen.

Das obige ist der detaillierte Inhalt vonWarum kann ich eine Array-Größe nicht mit einer „const int'-Variablen in C initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage