C 열거형 선언C Enumeration Declarations

열거형은 명명된 정수 상수의 집합으로 구성됩니다.An enumeration consists of a set of named integer constants. 열거형 형식 선언은 (선택적) 열거형 태그의 이름을 제공하고 명명된 정수 식별자의 집합("열거형 집합", "열거자 상수", "열거자" 또는 "멤버"라고 함)을 정의합니다.An enumeration type declaration gives the name of the (optional) enumeration tag and defines the set of named integer identifiers (called the "enumeration set," "enumerator constants," "enumerators," or "members"). 열거형 형식의 변수는 해당 형식으로 정의된 열거형 집합의 값 중 하나를 저장합니다.A variable with enumeration type stores one of the values of the enumeration set defined by that type.

enum 형식의 변수를 인덱싱 식에서 사용할 수 있으며 모든 산술 및 관계형 연산자의 피연산자로 사용할 수 있습니다.Variables of enum type can be used in indexing expressions and as operands of all arithmetic and relational operators. 열거형은 #define 전처리기 지시문 대신 사용할 수 있으며 값이 자동으로 생성되고 일반 범위 지정 규칙을 따를 수 있다는 이점을 제공합니다.Enumerations provide an alternative to the #define preprocessor directive with the advantages that the values can be generated for you and obey normal scoping rules.

ANSI C에서 열거자 상수의 값을 정의하는 식의 형식은 항상 int이므로 열거형 변수와 연결된 저장소는 단일 int 값에 필요한 저장소입니다.In ANSI C, the expressions that define the value of an enumerator constant always have int type; thus, the storage associated with an enumeration variable is the storage required for a single int value. 열거형 상수 또는 열거형 형식의 값은 C 언어에서 정수 식을 허용하는 모든 곳에서 사용할 수 있습니다.An enumeration constant or a value of enumerated type can be used anywhere the C language permits an integer expression.

구문Syntax

enum-specifier:enum-specifier:
enum identifier opt{ enumerator-list }enum identifier opt{ enumerator-list }

enum identifierenum identifier

선택적 identifierenumerator-list로 정의된 열거형 형식의 이름을 지정합니다.The optional identifier names the enumeration type defined by enumerator-list. 일반적으로 이 식별자를 목록으로 지정된 열거형의 "태그"라고 합니다.This identifier is often called the "tag" of the enumeration specified by the list. 다음 형태의 형식 지정자는A type specifier of the form


enum  
identifier  
{  
enumerator-list  
}  

identifierenumerator-list 비터미널로 지정된 열거형의 태그로 선언합니다.declares identifier to be the tag of the enumeration specified by the enumerator-list nonterminal. enumerator-list는 "열거자 내용"을 정의합니다.The enumerator-list defines the "enumerator content." enumerator-list는 아래에서 자세히 설명합니다.The enumerator-list is described in detail below.

태그의 선언이 표시되는 경우 태그를 사용하지만 enumerator-list를 생략하는 이후 선언에서는 이전에 선언된 열거형 형식을 지정합니다.If the declaration of a tag is visible, subsequent declarations that use the tag but omit enumerator-list specify the previously declared enumerated type. 태그는 정의된 열거형 형식을 참조해야 하며 해당 열거형 형식은 현재 범위에 있어야 합니다.The tag must refer to a defined enumeration type, and that enumeration type must be in current scope. 열거형 형식이 다른 곳에서 정의되므로 enumerator-list는 이 선언에서 나타나지 않습니다.Since the enumeration type is defined elsewhere, the enumerator-list does not appear in this declaration. 열거형에서 파생된 형식의 선언과 열거형 형식에 대한 typedef 선언에서는 열거형 형식이 정의되기 전에 열거형 태그를 사용할 수 있습니다.Declarations of types derived from enumerations and typedef declarations for enumeration types can use the enumeration tag before the enumeration type is defined.

구문Syntax

enumerator-list:enumerator-list:
enumeratorenumerator

enumerator-list , enumeratorenumerator-list , enumerator

enumerator:enumerator:
enumeration-constantenumeration-constant

enumeration-constant = constant-expressionenumeration-constant = constant-expression

enumeration-constant:enumeration-constant:
identifieridentifier

enumeration-list에 있는 각 enumeration-constant는 열거형 집합의 값에 대한 이름을 지정합니다.Each enumeration-constant in an enumeration-list names a value of the enumeration set. 기본적으로 첫 번째 enumeration-constant는 값 0과 연결됩니다.By default, the first enumeration-constant is associated with the value 0. 목록의 다음 enumeration-constant는 명시적으로 다른 값과 연결되지 않는 한 (constant-expression + 1)의 값과 연결됩니다.The next enumeration-constant in the list is associated with the value of ( constant-expression + 1 ), unless you explicitly associate it with another value. enumeration-constant의 이름은 해당 값과 동일합니다.The name of an enumeration-constant is equivalent to its value.

enumeration-constant = constant-expression을 사용하여 값의 기본 시퀀스를 재정의할 수 있습니다.You can use enumeration-constant = constant-expression to override the default sequence of values. 따라서 enumeration-constant = constant-expressionenumerator-list에 나타나는 경우 enumeration-constantconstant-expression으로 제공된 값과 연결됩니다.Thus, if enumeration-constant = constant-expression appears in the enumerator-list, the enumeration-constant is associated with the value given by constant-expression. constant-expressionint 형식이어야 하며 음수일 수 있습니다.The constant-expression must have int type and can be negative.

다음 규칙은 열거형 집합의 멤버에 적용됩니다.The following rules apply to the members of an enumeration set:

  • 열거형 집합에는 중복된 상수 값이 포함될 수 있습니다.An enumeration set can contain duplicate constant values. 예를 들어 값 0을 동일한 집합에 있는 nullzero라는 두 가지 식별자와 연결할 수 있습니다.For example, you could associate the value 0 with two different identifiers, perhaps named null and zero, in the same set.

  • 열거형 목록의 식별자는 표시 유형이 같은 동일한 범위에 있는 다른 식별자(다른 열거형 목록의 일반 변수 이름 및 식별자 포함)와 구별되어야 합니다.The identifiers in the enumeration list must be distinct from other identifiers in the same scope with the same visibility, including ordinary variable names and identifiers in other enumeration lists.

  • 열거형 태그는 일반 범위 지정 규칙을 따르며,Enumeration tags obey the normal scoping rules. 표시 유형이 동일한 다른 열거형, 구조체 및 공용 구조체 태그와 구별되어야 합니다.They must be distinct from other enumeration, structure, and union tags with the same visibility.

예제Examples

다음 예제에서는 열거형 선언을 보여 줍니다.These examples illustrate enumeration declarations:

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와 연결됩니다.The value 0 is associated with saturday by default. sunday 식별자는 명시적으로 0으로 설정됩니다.The identifier sunday is explicitly set to 0. 나머지 식별자에는 1부터 5까지의 값이 기본적으로 제공됩니다.The remaining identifiers are given the values 1 through 5 by default.

이 예제에서 DAY 집합의 값은 today 변수에 할당됩니다.In this example, a value from the set DAY is assigned to the variable today.

enum DAY today = wednesday;  

열거형 상수의 이름은 값을 할당하는 데 사용됩니다.Note that the name of the enumeration constant is used to assign the value. DAY 열거형 형식이 이전에 선언되었으므로 DAY 열거형 태그만 필요합니다.Since the DAY enumeration type was previously declared, only the enumeration tag DAY is necessary.

정수 값을 열거형 데이터 형식의 변수에 명시적으로 할당하려면 다음과 같이 형식 캐스팅을 사용합니다.To explicitly assign an integer value to a variable of an enumerated data type, use a type cast:

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

이 캐스팅은 C에서 권장되지만 필수 사항은 아닙니다.This cast is recommended in C but is not required.

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 */  

이 선언은 다음과 같이 지정될 수도 있습니다.This declaration can also be specified as

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

또는 다음과 같이 지정될 수도 있습니다.or as

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

이러한 변수를 사용하는 예제는 다음과 같습니다.An example that uses these variables might look like this:

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

명명되지 않은 열거자 데이터 형식도 선언할 수 있습니다.Unnamed enumerator data types can also be declared. 데이터 형식의 이름이 생략되었지만 변수를 선언할 수 있습니다.The name of the data type is omitted, but variables can be declared. response 변수는 다음과 같이 정의된 형식의 변수입니다.The variable response is a variable of the type defined:

enum { yes, no } response;  

참고 항목See Also

열거형Enumerations