Standard der Programmiersprache C ISO/IEC 9899:1999 (allgemein bekannt als C99) erlaubt die Verwendung einer designierter Initialisierer um Mitglieder einer Struktur oder Vereinigung wie folgt zu initialisieren:
MY_TYPE a = { .stuff = 0.456, .flag = true, .value = 123 };
Sie ist definiert in paragraph 7
Abschnitt 6.7.8 Initialization
der Norm ISO/IEC 9899:1999 als:
Wenn ein Bezeichner die folgende Form hat
. Kennung
dann muss das aktuelle Objekt (wie unten definiert) vom Typ Struktur oder Union sein und der Bezeichner muss der Name eines Mitglieds dieses Typs sein.
Beachten Sie, dass paragraph 9
desselben Abschnitts besagt Folgendes:
Sofern nicht ausdrücklich anders angegeben, nehmen unbenannte Mitglieder von Objekten vom Typ Struktur und Union im Sinne dieses Unterabschnitts nicht an der Initialisierung teil. Unbenannte Mitglieder von Strukturobjekten haben auch nach der Initialisierung einen unbestimmten Wert.
In der GNU GCC-Implementierung werden ausgelassene Mitglieder jedoch als Null oder Null-ähnlicher, typgerechter Wert initialisiert. Wie im Abschnitt 6.27 Bezeichnete Initialisierer der GNU GCC-Dokumentation:
Ausgelassene Feldmitglieder werden implizit genauso initialisiert wie Objekte, die eine statische Speicherdauer haben.
Microsoft Visual C++ Compiler soll laut offiziellem Blog-Post ab Version 2013 designierte Initialisierer unterstützen C++ Konformität Roadmap . Absatz Initializing unions and structs
von Initialisierungen Artikel in der MSDN Visual Studio-Dokumentation schlägt vor, dass unbenannte Mitglieder ähnlich wie bei GNU GCC auf Nullwerte initialisiert werden.
ISO/IEC 9899:2011 Norm (allgemein bekannt als C11), die die ISO/IEC 9899:1999 abgelöst hatte, behält die Initialisierungsprogramme unter Abschnitt 6.7.9 Initialization
. Es behält auch die paragraph 9
unverändert.
Neu ISO/IEC 9899:2018 Norm (allgemein bekannt als C18), die die ISO/IEC 9899:2011 abgelöst hatte, behält die Initialisierungen unter Abschnitt 6.7.9 Initialization
. Es behält auch die paragraph 9
unverändert.