Heim > Backend-Entwicklung > C++ > Warum erlaubt C keine anonymen Strukturen, während es anonyme Unions zulässt?

Warum erlaubt C keine anonymen Strukturen, während es anonyme Unions zulässt?

Susan Sarandon
Freigeben: 2024-12-11 15:25:12
Original
662 Leute haben es durchsucht

Why Doesn't C   Allow Anonymous Structs While Permitting Anonymous Unions?

Die Begründung für die Nichtzulassung anonymer Strukturen in C

C-Compiler können die Verwendung anonymer Unions und Strukturen als Erweiterungen des Standards zulassen . Der Standard selbst erlaubt jedoch nur anonyme Unions, keine anonymen Strukturen. Was steckt hinter dieser Diskrepanz?

Der Grund liegt in der Kompatibilität mit C. C unterstützt anonyme Unions, aber keine anonymen Strukturen. Um Kompatibilität zu erreichen, integriert C anonyme Unions in seine Sprache. Es besteht jedoch keine Anforderung an die Kompatibilität mit anonymen Strukturen in C, daher werden sie im Standard weggelassen.

Darüber hinaus erfüllen anonyme Strukturen in C kaum einen Zweck. Das bereitgestellte Beispiel, in dem eine Struktur drei Floats enthält, auf die sowohl über .v[i] als auch über .x, .y, .z zugegriffen werden kann, wird in C als undefiniertes Verhalten betrachtet. Es wird davon abgeraten, an ein Mitglied einer Union zu schreiben (.v[1]) und von einem anderen zu lesen (.y).

C bietet alternative Lösungen durch benutzerdefinierte Typen. Zum Beispiel:

struct vector3 {
  float v[3];
  float &operator[](int i) { return v[i]; }
  float &x() { return v[0]; }
  float &y() { return v[1]; }
  float &z() { return v[2]; }
};
Nach dem Login kopieren

Dieser Code bietet die gewünschte Funktionalität unter Einhaltung der C-Standards. Es wäre ratsam, definierte Strukturen zum Verwalten von Daten anstelle anonymer Strukturen zu verwenden, auch wenn dies in bestimmten Compiler-Erweiterungen möglich ist.

Das obige ist der detaillierte Inhalt vonWarum erlaubt C keine anonymen Strukturen, während es anonyme Unions zulässt?. 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