> 백엔드 개발 > C++ > C에서 열거형 선언을 전달할 수 있나요? 그리고 어떻게 하나요?

C에서 열거형 선언을 전달할 수 있나요? 그리고 어떻게 하나요?

Patricia Arquette
풀어 주다: 2024-12-11 00:27:14
원래의
874명이 탐색했습니다.

Can I Forward Declare Enums in C   and How?

C의 전방 선언 열거형: 제한 사항 및 해결 방법

C에서는 열거형의 크기가 다음에 따라 다르기 때문에 이전에는 열거형 전방 선언이 불가능했습니다. 그 내용. 하지만 C 11이 도입되면서 열거형의 크기만 명시적으로 지정하면 전방 선언이 가능해졌습니다.

문제 설명:

원래 문제가 발생했습니다. 다음과 같은 방식으로 열거형을 선언하려고 할 때:

enum E;

void Foo(E e);

enum E {A, B, C};
로그인 후 복사

이 코드는 컴파일러.

설명:

C 03 및 이전 버전에서는 열거형의 전방 선언이 허용되지 않았습니다. 왜냐하면 컴파일러는 열거형의 크기를 알아야 했기 때문입니다. 그 값을 저장합니다. 열거형의 크기는 열거된 값의 수와 유형에 따라 달라집니다. 이 정보가 없으면 컴파일러는 열거형에 메모리를 할당할 수 없습니다.

C 11 이상의 솔루션:

C 11 이상 버전에서는 열거형의 전방 선언 열거형의 크기를 명시적으로 지정하면 가능합니다. 이는 열거형: 을 사용하여 수행할 수 있습니다. 구문, 여기서 unsigned int 또는 unsigned short와 같은 열거형의 기본 유형입니다.

예:

enum Enum : unsigned int; // Forward declaration with an underlying type
void Foo(Enum e);

// Definition of the enum in a separate source file
enum Enum {
    VALUE1, VALUE2, VALUE3
};
로그인 후 복사

이제 이 코드는 성공적으로 컴파일됩니다.

Private Enum 값에 대한 고려 사항:

언급된 특정 시나리오에서 열거형 값은 비공개로 유지되어야 하며 전방 선언 접근 방식은 여전히 ​​실행 가능합니다. 열거형은 클라이언트에 열거형 값을 노출하지 않고 헤더 파일에서 비공개로 선언하고 구현 파일에서 내부적으로 정의할 수 있습니다.

그러나 전방 선언이 내부 열거형 값에 대한 액세스를 차단하지 않는다는 점에 유의하는 것이 중요합니다. 동일한 번역 단위(즉, 동일한 소스 파일 또는 함께 컴파일된 파일 세트) 따라서 헤더 파일에 액세스할 수 있는 프로그램의 다른 부분에서 열거형 값에 액세스하는 것이 여전히 가능합니다.

위 내용은 C에서 열거형 선언을 전달할 수 있나요? 그리고 어떻게 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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