Warum wird während der Laufzeit ein [n] in c akzeptiert?

8

warum können wir das in c machen?

%Vor%

Ich dachte Array ist Speicher während der Ladezeit aber scheint wie das obige Beispiel zur Laufzeit funktioniert. Versteh ich etwas falsch? Kannst du helfen?

Danke,

    
root 08.12.2009, 05:38
quelle

4 Antworten

6

I thought array is *al*located memory during load time but seems like the above example works during run-time.

Ja, normale Arrays wie <datatype> <Array_Name> [<size>] erhalten während der Ladezeit Speicher, der in C89 vorhanden ist und auch in C99 existiert.

Aber im Code-Ausschnitt int a[n]; ist ein Variable Length Array oder kurz VLA. VLAs in C99 sind genau wie jedes andere Array definiert, außer dass die Länge keine Kompilierzeitkonstante sein muss.

Ein anständiger Artikel über die Notwendigkeit von VLAs finden Sie hier: Ссылка :)

    
whacko__Cracko 08.12.2009, 08:57
quelle
9

Ich bin kein Experte in C, aber dies könnte ein Array variabler Länge sein, das von C99 und unterstützt von GCC , zum Beispiel. GCC reserviert den Speicher für ein solches Array im Stack, so dass es automatisch freigegeben wird, wenn Sie von der Funktion zurückkehren.

    
zoul 08.12.2009 05:44
quelle
7

Arrays variabler Länge wurden in C89 nicht gefunden, sind aber ein neues Feature in C99.

>     
ephemient 08.12.2009 05:44
quelle
0

Wenn Sie angeben, wie Ihr Code geschrieben ist (insbesondere, dass Sie eine Anweisung haben), muss dies Code innerhalb einer Funktion sein.

Obwohl ich nicht sicher bin, ob dies in der Spezifikation genau erforderlich ist, werden innerhalb einer Funktion alle automatischen Arrays (d. h. Funktionsebene, nicht statisch) auf den Stapel gelegt. Unabhängig davon, ob Sie ein reguläres oder ein VL-Array haben, wird der Speicher zur Laufzeit zugewiesen.

Der Speicher für nicht automatische Arrays wird zur Laufzeit nicht behandelt, daher wird VLA nicht unterstützt. Wenn Sie versuchen, den folgenden Code zu kompilieren:

%Vor%

Auf dem Compiler habe ich das getestet (gcc 4.2.1), ich habe folgende Fehler:

%Vor%     
R Samuel Klatchko 08.12.2009 07:25
quelle

Tags und Links