C에서 익명 구조체를 허용하지 않는 이유
C 컴파일러는 표준 확장으로 익명 공용체와 구조체의 사용을 허용할 수 있습니다. . 그러나 표준 자체에서는 익명 구조체가 아닌 익명 공용체만 허용합니다. 이러한 불일치의 원인은 무엇입니까?
그 이유는 C와의 호환성 때문입니다. C는 익명 공용체를 지원하지만 익명 구조체는 지원하지 않습니다. 호환성을 달성하기 위해 C는 익명 공용체를 언어에 통합합니다. 그러나 C에서는 익명 구조체와의 호환성에 대한 요구 사항이 없으므로 표준에서 생략되었습니다.
또한 익명 구조체는 C에서 거의 목적을 달성하지 못합니다. 구조체가 .v[i] 및 .x, .y, .z를 통해 액세스할 수 있는 세 개의 부동 소수점을 보유하는 제공된 예제는 C에서 정의되지 않은 동작으로 간주됩니다. Union의 한 구성원(.v[1])에 쓰고 다른 구성원(.y)에서 읽는 것은 권장되지 않습니다.
C는 사용자 정의 유형을 통해 대체 솔루션을 제공합니다. 예를 들면 다음과 같습니다.
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]; } };
이 코드는 C 표준을 준수하면서 원하는 기능을 제공합니다. 특정 컴파일러 확장에서 가능하더라도 익명 구조체보다는 데이터 관리를 위해 정의된 구조체를 사용하는 것이 현명할 것입니다.
위 내용은 C가 익명 공용체를 허용하면서 익명 구조체를 허용하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!