C의 전방 선언 열거형: 제한 사항 및 해결 방법
C에서는 열거형의 크기가 다음에 따라 다르기 때문에 이전에는 열거형 전방 선언이 불가능했습니다. 그 내용. 하지만 C 11이 도입되면서 열거형의 크기만 명시적으로 지정하면 전방 선언이 가능해졌습니다.
문제 설명:
원래 문제가 발생했습니다. 다음과 같은 방식으로 열거형을 선언하려고 할 때:
enum E; void Foo(E e); enum E {A, B, C};
이 코드는 컴파일러.
설명:
C 03 및 이전 버전에서는 열거형의 전방 선언이 허용되지 않았습니다. 왜냐하면 컴파일러는 열거형의 크기를 알아야 했기 때문입니다. 그 값을 저장합니다. 열거형의 크기는 열거된 값의 수와 유형에 따라 달라집니다. 이 정보가 없으면 컴파일러는 열거형에 메모리를 할당할 수 없습니다.
C 11 이상의 솔루션:
C 11 이상 버전에서는 열거형의 전방 선언 열거형의 크기를 명시적으로 지정하면 가능합니다. 이는 열거형:
예:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!