Heim >Backend-Entwicklung >C++ >Sind anonyme Strukturen im C-Standard konform?
Anonyme Strukturen: Standard oder nicht?
Laut MSDN sind anonyme Strukturen in C nicht standardmäßig. Diese Aussage wirft jedoch die Frage auf, ob diese Unterscheidung korrekt ist.
Standard Unbenannte Strukturen
Der C-Standard (sowohl C 03 als auch C 11) ermöglicht die Erstellung von unbenannte Strukturen wie folgt:
struct { int hi; int bye; };
Diese unbenannten Strukturen können als Mitglieder anderer instanziiert werden Strukturen:
struct Foo { struct { int hi; int bye; } bar; };
Anonyme Strukturen in Visual C und GCC
Was in Visual C und GCC oft als „anonyme Strukturen“ bezeichnet wird, unterscheidet sich geringfügig. Diese Strukturen ermöglichen auch den direkten Zugriff auf Mitglieder über das übergeordnete Objekt:
struct Foo { struct { // No member name int hi; int bye; }; }; int main() { Foo f; f.hi = 3; // Access member without using nested struct }
Nicht standardmäßige anonyme Strukturen
Diese Funktionalität des direkten Zugriffs auf Mitglieder über das übergeordnete Objekt ist nicht möglich Standard. Es handelt sich um eine Microsoft-Erweiterung, die in Visual C und auch von GCC unterstützt wird. Windows-API-Header nutzen diese Funktion der „anonymen Struktur“. Es kann jedoch deaktiviert werden, indem NONAMELESSUNION vor dem Einbinden von Windows-Header-Dateien definiert wird.
Unterschied zu anonymen Unions
Standardmäßige anonyme Unions ermöglichen auch den Zugriff auf Mitglieder direkt über das übergeordnete Objekt . Zum Beispiel:
struct Foo { union { // No member name int hi; int bye; }; }; int main() { Foo f; f.hi = 3; // Access member without using nested union }
Schlussfolgerung
Der Begriff „unbenannte Struktur“ im Standard bezieht sich auf den Gesamttyp, während der Begriff „anonyme Struktur“ in Visual verwendet wird C und GCC beziehen sich auf die Möglichkeit, direkt über das übergeordnete Objekt auf Mitglieder zuzugreifen. Diese letztgenannte Funktionalität ist kein Standard, wird jedoch von gängigen Compilern weiterhin weitgehend unterstützt.
Das obige ist der detaillierte Inhalt vonSind anonyme Strukturen im C-Standard konform?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!