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]; } };
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!