>백엔드 개발 >C++ >C에서는 익명 구조체가 표준인가요?

C에서는 익명 구조체가 표준인가요?

Susan Sarandon
Susan Sarandon원래의
2024-12-03 08:02:10170검색

Are Anonymous Structs Standard in C  ?

C에서 "익명 구조체"가 표준입니까?

MSDN에서는 익명 구조체가 C에서 비표준이라고 주장하지만 자세히 살펴보면 자세히 알 수 있습니다. 다른 시나리오. C 표준은 "이름 없는 구조체"를 정의하지만 "익명 구조체"의 개념을 구체적으로 다루지는 않습니다.

이름 없는 구조체 정의

C 표준에서는 다음을 허용합니다. 익명 구조체라고도 하는 명명되지 않은 구조체 선언. 이러한 구조체에는 이름이 없으며 일반적으로 다른 구조 내에서 중첩 유형으로 사용됩니다. 다음 코드 조각은 명명되지 않은 구조체를 보여줍니다.

struct Foo {
    struct {
        int hi;
        int bye;
    };
};

이 코드는 Foo 구조 내에서 명명되지 않은 구조체를 정의합니다. 명명되지 않은 구조체는 hi와 bye의 두 멤버로 구성됩니다.

익명 구조체 멤버 액세스

표준 C에서는 점 연산자를 사용하여 명명되지 않은 구조체 멤버에 액세스할 수 있습니다. . 예를 들어 이전 예에서 hi 멤버는 다음과 같이 액세스할 수 있습니다.

Foo f;
f.hi = 3;

익명 구조체 대 "이름이 지정되지 않은 구조체"

C 03 그리고 C 11은 이름이 지정되지 않은 멤버에 액세스하는 현상인 "익명 구조체"를 명시적으로 언급하지 않습니다. 구조체가 부모 구조체의 멤버인 것처럼 다루는 내용은 구체적으로 다루지 않습니다. "멤버로서의 익명 구조체"라고 알려진 이 동작은 명명되지 않은 구조체에 대한 표준에 포함되지 않습니다.

MSDN의 혼란

MSDN은 명명되지 않은 구조체를 다음과 실수로 혼동하는 것으로 보입니다. 익명 구조체를 멤버로 사용합니다. 이름 없는 구조체는 표준이지만 멤버인 익명 구조체는 GCC 및 Visual C와 같은 특정 컴파일러에서 지원하는 비표준 기능입니다.

결론

요약하면, 멤버로서의 익명 구조체는 C에서 표준이 아니며, 명명되지 않은 구조체는 표준에서 완전히 지원됩니다. "이름 없는 구조체"와 "익명 구조체"라는 용어는 서로 다른 개념을 나타내며, 후자는 이름 없는 구조체의 멤버가 마치 상위 구조체의 멤버인 것처럼 액세스하는 비표준 동작을 나타냅니다.

위 내용은 C에서는 익명 구조체가 표준인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.