C에서는 "익명 구조"가 표준인가요? 상세한 분석
소개
C의 "익명 구조" 개념은 표준화와 정확한 성격에 대한 의문을 제기했습니다. 이 기사의 목적은 관련 문서를 검토하고 다양한 유형의 익명 구조 간의 미묘한 차이를 탐색하여 이러한 문제를 명확히 하는 것입니다.
익명 구조는 비표준인가요?
에 따르면 Microsoft의 MSDN 문서인 익명 구조(이름 없이 정의된 구조)는 C에서 비표준으로 간주됩니다. 그러나 ISO C 표준은 이 측면을 명시적으로 다루지 않습니다.
익명 구조 이해
Unnamed Structs:
C 표준에서는 다음을 허용합니다. 인스턴스화하여 일반 명명된 구조체로 사용할 수 있는 명명되지 않은 구조체(이름 없는 구조체) 선언용 structs.
익명 구조체:
익명 구조체는 이름 없는 구조체의 멤버에 직접 액세스할 수 있는 일부 C 컴파일러(예: GCC 및 Visual C)의 특정 기능을 나타냅니다. 포함하는 객체입니다.
차별점
가장 큰 차별점은 회원들의 접근성에 있습니다. 명명되지 않은 구조체의 경우 표준 점 연산자(예: foo.bar)를 통해 멤버에 액세스할 수 있는 반면, 익명 구조체에서는 구조체 이름(예: foo.hi)을 지정하지 않고 멤버에 직접 액세스할 수 있습니다.
표준 대 비표준
표준은 이름이 지정되지 않은 기능을 정의합니다. 하지만 구체적으로 멤버에 직접 액세스하는 "익명" 동작은 아닙니다. 따라서 후자는 특정 컴파일러에서 지원하는 비표준 기능으로 간주됩니다.
사용 예
표준 명명 구조체:
struct Foo { struct { int hi; int bye; } bar; };
비표준 익명 구조체:
struct Foo { struct { int hi; int bye; }; // <--- no member name! };
두 번째 예에서는 멤버에 직접 액세스할 수 있습니다.
f.hi = 3; // Non-standard, compiler-dependent feature
결론
익명 구조, 포함 개체의 멤버에 직접 액세스하는 기능으로 정의된 대로 특정 C 컴파일러에서 지원되는 비표준 기능입니다. 표준 C는 명명되지 않은 구조체의 기능을 제공하지만 멤버의 직접적인 접근성이 지정되지 않았으며 지원이 보장되지 않습니다.
위 내용은 C 표준을 준수하는 익명 구조가 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!