> 백엔드 개발 > C++ > C 표준을 준수하는 익명 구조가 있나요?

C 표준을 준수하는 익명 구조가 있나요?

Linda Hamilton
풀어 주다: 2024-12-10 00:40:14
원래의
529명이 탐색했습니다.

Are Anonymous Structures in C   Standard Compliant?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿