Heim >Backend-Entwicklung >C++ >Sind anonyme Strukturen im C-Standard konform?

Sind anonyme Strukturen im C-Standard konform?

DDD
DDDOriginal
2024-12-07 07:30:12451Durchsuche

Are Anonymous Structs in C   Standard Compliant?

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!

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