Heim >Backend-Entwicklung >C++ >Sind Arrays variabler Länge (VLAs) in globalen und lokalen Bereichen in C und C zulässig?

Sind Arrays variabler Länge (VLAs) in globalen und lokalen Bereichen in C und C zulässig?

Susan Sarandon
Susan SarandonOriginal
2024-12-02 05:45:15540Durchsuche

Are Variable Length Arrays (VLAs) Allowed in Global and Local Scopes in C and C  ?

Arrays variabler Länge (VLAs) in C und C

Sie erkundigen sich nach dem Verhalten und den Einschränkungen im Zusammenhang mit Arrays variabler Länge (VLAs) in C und C .

Arrays mit variabler Länge in Local Geltungsbereich

Ihr Verständnis ist korrekt. In C99 können VLAs innerhalb lokaler Bereiche deklariert werden, wie in Ihrem Beispiel gezeigt:

int main(int argc, char **argv) {
    int size = 100;
    int array[size];
    return 0;
}

Arrays mit variabler Länge im globalen Bereich

VLAs sind jedoch tatsächlich verboten in globalen Bereichen in C99. Im Einzelnen:

const int global_size = 100;
int global_array[global_size]; // forbidden in C99, allowed in C++

Der Grund für diese Einschränkung liegt in der Tatsache, dass der Compiler die Größe des VLA zur Kompilierungszeit nicht bestimmen kann, da const-qualifizierte Objekte in C nicht als ganzzahlige konstante Ausdrücke gelten. Daher ist die Deklaration solcher VLAs im globalen Bereich verboten.

Unterschiede im Verhalten

Dieses Verhalten unterscheidet sich von dem von Arrays im globalen und lokalen Bereich, da globale Arrays ihre eigene Größe haben wird zur Kompilierzeit bestimmt, während die Größe von VLAs im lokalen Bereich dynamisch basierend auf dem Wert einer Variablen währenddessen berechnet werden kann Laufzeit.

Fehlende VLA-Unterstützung in C

Im Gegensatz zu C99 erlaubt C nicht die Verwendung von VLAs. Stattdessen bietet C Funktionen wie dynamische Speicherzuweisung und Containerklassen wie Vektoren und Arrays, die unterschiedliche Array-Größen berücksichtigen.

Zusammenfassend lässt sich sagen, dass Ihr Verständnis des Verhaltens und der Einschränkungen rund um VLAs in C und C richtig ist. VLAs sind in lokalen Bereichen, jedoch nicht in globalen Bereichen in C99 zulässig und werden in C nicht unterstützt. Diese Einschränkungen ergeben sich aus der Notwendigkeit, die Größe des VLA zur Kompilierzeit zu bestimmen, was mit globalen Variablen nicht immer möglich ist.

Das obige ist der detaillierte Inhalt vonSind Arrays variabler Länge (VLAs) in globalen und lokalen Bereichen in C und C zulässig?. 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