Teilweise Initialisierung automatischer Strukturen und Arrays in C und C
Das Missverständnis rührt von der falschen Annahme her, dass eine teilweise Initialisierung automatischer Strukturen und Arrays erfolgt ist in C erlaubt. Entgegen dieser Annahme definieren die Standards explizit nur zwei Fälle: vollständige Initialisierung oder keine Initialisierung.
Teilinitialisierung
Der Begriff „Teilinitialisierung“ ist in den Standards nicht definiert. Es bezieht sich auf die Initialisierung nur einer Teilmenge von Mitgliedern in einer Struktur oder einem Array.
Vollständige Initialisierung
Eine vollständige Initialisierung erfolgt, wenn alle Mitglieder einer Struktur oder eines Arrays explizit initialisiert werden. Zum Beispiel:
struct somestruct { int a; int b; int c; }; somestruct s = {1, 2, 3};
Keine Initialisierung
Wenn keine Initialisierung bereitgestellt wird, hängt das Verhalten vom Speichertyp der Variablen ab:
Teilweise Initialisierung in der Praxis
Obwohl es sich nicht um ein Standardverhalten handelt, wird die teilweise Initialisierung automatischer Struktur- und Array-Mitglieder von den meisten unterstützt Compiler, einschließlich Visual Studio und gcc/g .
C Standard (C99)
Abschnitt 6.7.8.21 Initialisierung
Wenn weniger Initialisierer bereitgestellt werden als die Anzahl der Elemente oder Mitglieder in einem Aggregat, werden die verbleibenden Elemente mit initialisiert 0.
C Standard (C 03)
Abschnitt 8.5.1 Aggregate
Wenn weniger Initialisierer vorhanden sind, wird der Nicht initialisierte Mitglieder sind wertinitialisiert. Die Wertinitialisierung unterscheidet sich je nach Objekttyp. Beispielsweise werden nicht statische Datenelemente eines nicht gewerkschaftlichen Klassentyps mit Werten initialisiert, während primitive Typen wie Ganzzahlen mit Nullen initialisiert werden.
Schlussfolgerung
Teilweise Die Initialisierung automatischer Strukturen und Arrays ist ein nicht standardmäßiges Verhalten, das bei unsachgemäßer Handhabung zu undefinierten Ergebnissen führen kann. Um Portabilität und Korrektheit sicherzustellen, stellen Sie immer eine vollständige Initialisierung oder keine Initialisierung sicher.
Das obige ist der detaillierte Inhalt vonIst die teilweise Initialisierung automatischer Strukturen und Arrays in C und C zulässig und definiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!