수색…


비고

열거 형은 enum 키워드와 선택적 식별자 와 그 뒤에 중괄호로 묶인 열거 자 목록 으로 구성됩니다.

식별자int 유형입니다.

enumerator-list 에는 적어도 하나의 열거 자 요소가 있습니다.

열거 자는 선택적으로 int 유형의 상수 표현식에 "할당"될 수 있습니다.

열거 자는 상수이며 char , 부호있는 정수 또는 부호없는 정수와 호환됩니다. 사용 된 것은 구현 정의 입니다. 어떤 경우 든, 사용 된 타입은 해당 열거 형에 대해 정의 된 모든 값을 나타낼 수 있어야합니다.

상수식이 열거 자에 "할당"되어 있지 않고 열거 자 목록의 첫 번째 항목 0 값을 받고 그렇지 않으면 열거 자 목록 의 이전 항목 값에 1을 더한 값을 취합니다.

여러 "할당"을 사용하면 동일한 열거 의 다른 열거 자로 이어질 수 있으므로 동일한 값을 전달할 수 있습니다.

간단한 열거

열거 형은 사용자 정의 데이터 유형으로 정수 상수로 구성되며 각 상수에는 이름이 지정됩니다. 키워드 enum 은 열거 형 데이터 유형을 정의하는 데 사용됩니다.

int 또는 string/ char* 대신 enum 을 사용하면 컴파일 타임 검사가 증가하고 유효하지 않은 상수가 전달되는 것을 방지하고 사용하기에 합당한 값을 문서화합니다.

예제 1

enum color{ RED, GREEN, BLUE };

void printColor(enum color chosenColor)
{
    const char *color_name = "Invalid color";
    switch (chosenColor)
    {
       case RED:
         color_name = "RED";
         break;
       
       case GREEN:
        color_name = "GREEN";
        break;    

       case BLUE:
        color_name = "BLUE";
        break;
    }
    printf("%s\n", color_name);
}

주 기능이 다음과 같이 정의 된 경우 (예 :) :

int main(){
    enum color chosenColor;
    printf("Enter a number between 0 and 2");
    scanf("%d", (int*)&chosenColor);
    printColor(chosenColor);
    return 0;
}
C99

예제 2

이 예제에서는 C99 이후 표준화 된 지정된 초기화 프로그램을 사용합니다.

enum week{ MON, TUE, WED, THU, FRI, SAT, SUN };
     
static const char* const dow[] = { 
  [MON] = "Mon", [TUE] = "Tue", [WED] = "Wed", 
  [THU] = "Thu", [FRI] = "Fri", [SAT] = "Sat", [SUN] = "Sun" };
    
void printDayOfWeek(enum week day) 
{ 
   printf("%s\n", dow[day]);
}

범위 검사를 사용한 동일한 예 :

enum week{ DOW_INVALID = -1, 
  MON, TUE, WED, THU, FRI, SAT, SUN, 
  DOW_MAX };
     
static const char* const dow[] = { 
  [MON] = "Mon", [TUE] = "Tue", [WED] = "Wed", 
  [THU] = "Thu", [FRI] = "Fri", [SAT] = "Sat", [SUN] = "Sun" };
    
void printDayOfWeek(enum week day) 
{ 
   assert(day > DOW_INVALID && day < DOW_MAX);
   printf("%s\n", dow[day]);
}

Typedef 열거 형

열거 형을 명명하는 데는 여러 가지 가능성과 규칙이 있습니다. 첫 번째는 enum 키워드 바로 다음에 태그 이름 을 사용하는 것입니다.

enum color
{ 
    RED, 
    GREEN, 
    BLUE 
};

이 열거 형은 항상 다음과 같이 키워드 태그와 함께 사용해야합니다.

enum color chosenColor = RED;

enum 선언 할 때 typedef 직접 사용하면 태그 이름을 생략하고 enum 키워드없이 type을 사용할 수 있습니다.

typedef enum 
{ 
    RED, 
    GREEN, 
    BLUE 
} color;

color chosenColor = RED;

그러나이 후자의 경우 우리는 정의에서 태그 이름을 사용하지 않았으므로 enum color 으로 사용할 수 없습니다. 하나의 공통된 규칙은 enum 키워드와 함께 또는 같은 이름을 사용할 수 있도록 두 가지를 모두 사용하는 것입니다. 이것은 C ++ 과 호환된다는 특별한 이점을 가지고 있습니다.

enum color                /* as in the first example */
{ 
    RED, 
    GREEN, 
    BLUE 
};
typedef enum color color; /* also a typedef of same identifier */

color chosenColor  = RED;
enum color defaultColor = BLUE;

기능:

void printColor()
{
    if (chosenColor == RED)
    {
        printf("RED\n");
    }
    else if (chosenColor == GREEN)
    {
        printf("GREEN\n");    
    }
    else if (chosenColor == BLUE)
    {
        printf("BLUE\n");
    }
}

자세한 내용에 typedef 참조 형식 정의

중복 값이있는 열거 형

열거 형 값은 결코 고유 할 필요가 없습니다.

#include <stdlib.h> /* for EXIT_SUCCESS */
#include <stdio.h> /* for printf() */


enum Dupes
{
   Base, /* Takes 0 */
   One, /* Takes Base + 1 */
   Two, /* Takes One + 1 */
   Negative = -1,
   AnotherZero /* Takes Negative + 1 == 0, sigh */
};

int main(void)
{
  printf("Base = %d\n", Base);
  printf("One = %d\n", One);
  printf("Two = %d\n", Two);
  printf("Negative = %d\n", Negative);
  printf("AnotherZero = %d\n", AnotherZero);

  return EXIT_SUCCESS;
}

샘플 인쇄 :

Base = 0
One = 1
Two = 2
Negative = -1
AnotherZero = 0

typename없이 열거 형 상수

열거 유형은 이름을 지정하지 않고도 선언 할 수 있습니다.

  enum { buffersize = 256, };
  static unsigned char buffer [buffersize] = { 0 };

이것은이 예제에서와 같이 배열 길이로 사용될 수있는 int 타입의 컴파일 타임 상수를 정의 할 수있게 해줍니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow