다음을 통해 공유


C 열거형 선언

열거형은 명명된 정수 상수 집합으로 구성됩니다. 열거형 형식 선언은 (선택 사항) 열거형 태그의 이름을 제공합니다. 또한 명명된 정수 식별자 집합( 열거형 집합, 열거자 상수, 열거자 또는 멤버라고 함)을 정의합니다. 열거형 형식의 변수는 해당 형식으로 정의된 열거형 집합의 값 중 하나를 저장합니다.

형식의 enum 변수는 인덱싱 식 및 모든 산술 및 관계형 연산자의 피연산자로 사용할 수 있습니다. 열거형은 값을 생성할 #define 수 있고 일반적인 범위 지정 규칙을 준수할 수 있다는 장점이 있는 전처리기 지시문의 대안을 제공합니다.

ANSI C에서 열거자 상수의 값을 정의하는 식에는 항상 형식이 있습니다 int . 즉, 열거형 변수와 연결된 스토리지는 단일 int 값에 필요한 스토리지입니다. 열거형 상수 또는 열거형 형식의 값은 C 언어에서 정수 식을 허용하는 모든 위치에서 사용할 수 있습니다.

문법

enum-specifier:
enum identifier 선택{enumerator-list}
enum identifier

enumerator-list:
enumerator
enumerator-list , enumerator

enumerator:
enumeration-constant
enumeration-constant = constant-expression

enumeration-constant:
identifier

에 의해 enumerator-list정의된 열거형 형식의 선택적 identifier 이름입니다. 이 식별자를 목록에서 지정한 열거형의 "태그"라고도 합니다. 형식 지정자는 다음과 같이 비터미널로 enumerator-list 지정된 열거형의 태그로 선언 identifier 합니다.

enum identifier
{
    // enumerator-list
}

enumerator-list 거형 집합의 멤버를 정의합니다.

태그 선언이 표시되면 태그를 사용하지만 생략 enumerator-list 하는 이후 선언은 이전에 선언된 열거형 형식을 지정합니다. 태그는 정의된 열거형 형식을 참조해야 하며 해당 열거형 형식은 현재 범위에 있어야 합니다. 열거형 형식은 다른 곳에서 enumerator-list 정의되므로 이 선언에는 표시되지 않습니다. 열거형 형식에서 파생된 형식의 선언 및 typedef 열거형 형식에 대한 선언은 열거형 형식이 정의되기 전에 열거형 태그를 사용할 수 있습니다.

enumerator-listenumeration-constant 이름은 열거형 집합의 값입니다. 기본적으로 첫 번째 enumeration-constant 값은 값 0과 연결됩니다. 다른 값과 명시적으로 연결하지 않는 한 목록의 다음 enumeration-constant 값은 ( constant-expression + 1)의 값과 연결됩니다. 의 enumeration-constant 이름은 해당 값과 동일합니다.

기본 값 시퀀스를 재정의하는 데 사용할 enumeration-constant = constant-expression 수 있습니다. 즉, 에 enumeration-constantenumerator-list표시되는 경우 enumeration-constant = constant-expression 이 값은 지정된 값constant-expression과 연결됩니다. 형식이 constant-expressionint 있어야 하며 음수일 수 있습니다.

다음 규칙은 열거형 집합의 멤버에 적용됩니다.

  • 열거형 집합에는 중복 상수 값이 포함될 수 있습니다. 예를 들어 값 0을 동일한 집합의 두 개의 서로 다른 식별자(예: 명명된 null 멤버 및 멤버)와 zero연결할 수 있습니다.

  • 열거형 목록의 식별자는 동일한 표시 유형을 가진 동일한 범위의 다른 식별자와 구별되어야 합니다. 여기에는 다른 열거형 목록의 일반 변수 이름 및 식별자가 포함됩니다.

  • 열거형 태그는 일반적인 범위 지정 규칙을 준수합니다. 표시 유형이 동일한 다른 열거형, 구조체 및 공용 구조체 태그와 구별되어야 합니다.

예시

다음 예제에서는 열거형 선언을 보여 줍니다.

enum DAY            /* Defines an enumeration type    */
{
    saturday,       /* Names day and declares a       */
    sunday = 0,     /* variable named workday with    */
    monday,         /* that type                      */
    tuesday,
    wednesday,      /* wednesday is associated with 3 */
    thursday,
    friday
} workday;

값 0은 기본적으로 연결됩니다 saturday . 식별자는 sunday 명시적으로 0으로 설정됩니다. 나머지 식별자에는 기본적으로 1~5 값이 지정됩니다.

이 예제에서는 집합 DAY 의 값이 변수 today에 할당됩니다.

enum DAY today = wednesday;

열거형 상수의 이름은 값을 할당하는 데 사용됩니다. DAY 열거형 형식은 이전에 선언되었으므로 열거형 태그 DAY 만 필요합니다.

열거된 데이터 형식의 변수에 정수 값을 명시적으로 할당하려면 형식 캐스트를 사용합니다.

workday = ( enum DAY ) ( day_value - 1 );

이 캐스트는 C에서 권장되지만 필수는 아닙니다.

enum BOOLEAN  /* Declares an enumeration data type called BOOLEAN */
{
    false,     /* false = 0, true = 1 */
    true
};

enum BOOLEAN end_flag, match_flag; /* Two variables of type BOOLEAN */

이 선언은 다음과 같이 지정할 수도 있습니다.

enum BOOLEAN { false, true } end_flag, match_flag;

또는 다음으로

enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;

이러한 변수를 사용하는 예제는 다음과 같습니다.

if ( match_flag == false )
    {
     .
     .   /* statement */
     .
    }
    end_flag = true;

명명되지 않은 열거자 데이터 형식도 선언할 수 있습니다. 데이터 형식의 이름은 생략되지만 변수를 선언할 수 있습니다. 변수 response 는 정의된 형식의 변수입니다.

enum { yes, no } response;

참고하십시오

열거형(C++)