Heim > Backend-Entwicklung > C++ > Warum wird dieser C-Code trotz einer nicht konstanten Array-Grenze kompiliert?

Warum wird dieser C-Code trotz einer nicht konstanten Array-Grenze kompiliert?

Barbara Streisand
Freigeben: 2025-01-05 10:29:40
Original
348 Leute haben es durchsucht

Why Does This C   Code Compile Despite a Non-Constant Array Bound?

C-Array als konstanter Ausdruck gebunden: Ausnahme im Code

In C muss ein gebundenes Array normalerweise ein konstanter Ausdruck sein, um dies sicherzustellen Die Größe des Arrays ist beim Kompilieren bekannt. In bestimmten Fällen scheint jedoch gegen diese Regel verstoßen zu werden. Sehen wir uns ein konkretes Beispiel an:

#include <iostream>
using namespace std;

int main() {
    int n = 10;
    int a[n];  // Array a with size n

    for (int i = 0; i < n; i++) {
        a[i] = i + 1;
        cout << a[i] << endl;
    }

    return 0;
}
Nach dem Login kopieren

Dieser Code wird fehlerfrei ausgeführt, wenn er mit Xcode4 auf dem Mac kompiliert wird. Trotz der Tatsache, dass die Größe des Arrays a kein konstanter Ausdruck ist, funktioniert der Code.

Erklärung: Arrays mit variabler Länge (VLA)

Der Grund dafür Dass der Code funktioniert, ist auf eine Funktion namens Variable-Length Arrays (VLA) zurückzuführen, die in C99 eingeführt wurde. VLAs ermöglichen die Bestimmung der Größe eines Arrays zur Laufzeit, im Gegensatz zu regulären Arrays, deren Größe zur Kompilierungszeit bekannt sein muss.

Im bereitgestellten Code ist n kein konstanter Ausdruck, sondern eine Variable. Da der Compiler in

Es ist wichtig zu beachten, dass VLAs ähnlich wie statische Arrays auf dem Stapel zugewiesen werden. Dies bedeutet, dass der Speicher für das Array automatisch zugewiesen und freigegeben wird, wenn das Programm die Funktion, in der die VLA deklariert ist, aufruft und verlässt. Dieses Verhalten unterscheidet sich von regulären Arrays, die auf dem Heap zugewiesen sind und manuell mithilfe von Zeigern verwaltet werden müssen.

Das obige ist der detaillierte Inhalt vonWarum wird dieser C-Code trotz einer nicht konstanten Array-Grenze kompiliert?. 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