Heim > Backend-Entwicklung > C++ > Ist die teilweise Initialisierung automatischer Strukturen und Arrays in C und C zulässig und definiert?

Ist die teilweise Initialisierung automatischer Strukturen und Arrays in C und C zulässig und definiert?

Barbara Streisand
Freigeben: 2024-12-11 08:49:10
Original
985 Leute haben es durchsucht

Is Partial Initialization of Automatic Structures and Arrays in C and C   Allowed and Defined?

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};
Nach dem Login kopieren

Keine Initialisierung

Wenn keine Initialisierung bereitgestellt wird, hängt das Verhalten vom Speichertyp der Variablen ab:

  • Bei automatischen Variablen (auf dem Stapel) kann nicht garantiert werden, dass nicht initialisierte Mitglieder initialisiert werden. Ihre Werte sind unbestimmt.
  • Bei statischen Variablen (mit globalem oder Dateibereich) werden nicht initialisierte Mitglieder auf 0 für Integraltypen und NULL für Zeigermitglieder initialisiert.

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!

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