Heim >Backend-Entwicklung >C++ >Warum wurden designierte Initialisierer von C 11 ausgeschlossen?

Warum wurden designierte Initialisierer von C 11 ausgeschlossen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-28 10:52:14128Durchsuche

Why Were Designated Initializers Excluded from C  11?

Designierte Initialisierer in C 11: Begründung für den Ausschluss

Während C99 die Verwendung von designierten Initialisiererlisten zulässt, wie im bereitgestellten Codeausschnitt , C 11 verbietet diese Funktion. Diese Entscheidung des C 11-Standardkomitees wirft die Frage auf, warum eine so praktische Funktion ausgeschlossen wurde.

C.1.7[diff.decl].4: Einschränkungen in C :

Die Einführung bestimmter Initialisierer in C hätte mehrere Herausforderungen mit sich gebracht:

  • Unbestimmt Auswertungsreihenfolge: In C99 ist die Auswertungsreihenfolge für bestimmte Initialisierer nicht angegeben, was zu potenziell undefiniertem Verhalten führt, wenn die initialisierten Mitglieder interagieren. Im Gegensatz dazu erzwingt C eine strikte Auswertungsreihenfolge für Initialisiererlisten und verhindert so solche Probleme.
  • Inkonsistentes Verhalten mit C99: Das Zulassen bestimmter Initialisierer in C hätte eine Unterbrechung der Kompatibilität mit vorhandenen C99-Implementierungen erforderlich gemacht eine bestimmte Bewertungsanordnung durchsetzen. Dies hätte zu potenziellen Portabilitätsproblemen geführt.
  • Verschachtelte Bezeichner und Array-Initialisierungen: C99 erlaubt auch verschachtelte Bezeichner und Array-bestimmte Initialisierungen, was die C-Sprache noch komplexer gemacht und Bedenken hinsichtlich dieser Merkmale hervorgerufen hätte inkonsistentes Verhalten.

Fazit:

Das C 11-Standardkomitee hat diese technischen Einschränkungen sowie die Möglichkeit von Kompatibilitätsproblemen und inkonsistentem Verhalten sorgfältig berücksichtigt, als es sich dafür entschied, bestimmte Initialisierungslisten auszuschließen. Stattdessen stellt C eine strenge Auswertungsreihenfolge für Initialisierungslisten bereit, um vorhersehbares Verhalten sicherzustellen und die Kompatibilität mit den vorhandenen Regeln aufrechtzuerhalten.

Das obige ist der detaillierte Inhalt vonWarum wurden designierte Initialisierer von C 11 ausgeschlossen?. 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