C 언어에서 열거형을 사용하는 방법

How Use Enum C Language



C 프로그래밍 언어의 enum 프로그램은 정수 상수 값을 정의하는 데 사용되며 이는 깨끗하고 읽기 쉬운 프로그램을 작성하는 데 매우 유용합니다. 프로그래머는 일반적으로 열거형을 사용하여 프로그램에서 명명된 정수 상수를 정의하여 소프트웨어의 더 나은 가독성과 유지 관리성을 제공합니다. 이 기사에서는 열거형에 대해 자세히 설명합니다.

통사론

열거 <열거형 이름> {
Enumeration_Constant_Element-1,
Enumeration_Constant_Element-2,
Enumeration_Constant_Element-,
...........................,
Enumeration_Constant_Element-N,
};

Enumeration_Constant_Element-1의 기본값은 0, Enumeration_Constant_Element-2의 값은 1, Enumeration_Constant_Element-3의 값은 2, Enumeration_Constant_Element-n의 값은 (n-1)입니다.







Enum에 대해 자세히 알아보기

이제 열거형을 정의하는 구문을 알고 있으므로 예를 살펴보겠습니다.



열거오류{
IO_ERROR,
DISK_ERROR,
네트워크 오류
};

enum 키워드는 항상 열거 유형을 정의하는 데 사용해야 합니다. 따라서 열거형을 정의할 때마다 enum 키워드를 앞에 사용해야 합니다. enum 키워드 다음에 유효한 식별자를 사용하여 .



위의 예에서 컴파일러는 정수 값 0에 IO_ERROR, 정수 값 1에 DISK_ERROR, 정수 값 2에 NETWORK_ERROR를 할당합니다. 기본적으로 첫 번째 열거형 요소에는 항상 값 0이 할당되고 다음 열거형 요소에는 값이 할당됩니다. enum-element에는 값 1이 할당되는 식입니다.





이 기본 동작은 다음과 같이 상수 적분 값을 명시적으로 할당하여 필요한 경우 변경할 수 있습니다.

열거오류{
IO_ERROR= 2,
DISK_ERROR,
네트워크 오류= 8 ,
PRINT_ERROR
};

이 경우 IO_ERROR는 프로그래머에 의해 명시적으로 2의 값에 할당되고 DISK_ERROR는 컴파일러에 의해 3의 값에 할당되며 NETWORK_ERROR는 프로그래머에 의해 명시적으로 8의 값에 할당되고 PRINT_ERROR는 다음 값에 할당됩니다. 컴파일러에 의한 이전 열거형 요소 NETWORK_ERROR(즉, 9)의 정수 값.



이제 C에서 사용자 정의 열거 유형을 정의하는 방법을 이해했습니다. 열거 유형의 변수를 선언하는 것이 가능합니까(정수 유형의 변수를 선언할 수 있는 것처럼)? 예, 그렇습니다! 열거형 변수는 다음과 같이 선언할 수 있습니다.

열거오류 Hw_Error;

여기서도 enum은 키워드이고 Error는 열거형 유형이며 Hw_Error는 열거형 변수입니다.

이제 enum의 다양한 사용법을 이해하기 위해 다음 예제를 살펴보겠습니다.

  • 예 1: 기본 열거형 정의 사용
  • 예 2: 사용자 지정 열거형 정의 사용
  • 예 3: 상수 표현식을 사용한 열거형 정의
  • 예 4: 열거형 범위

예 1: 기본 열거형 정의 사용

이 예에서는 기본 상수 값으로 열거형을 정의하는 방법을 배웁니다. 컴파일러는 열거형 요소에 기본값을 할당합니다. 아래에서 예제 프로그램과 해당 출력을 볼 수 있습니다.

#포함하다

/* 열거형 정의 */
열거오류{
IO_ERROR,
DISK_ERROR,
네트워크 오류
};

정수기본()
{
열거오류 Hw_Error; /* 열거형 변수 생성*/

인쇄 ('Hw_Error를 IO_ERROR로 설정N');
Hw_Error=IO_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 DISK_ERROR로 설정N');
Hw_Error=DISK_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 NETWORK_ERROR로 설정N');
Hw_Error=네트워크 오류;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

반품 0;
}

https://lh6.googleusercontent.com/0CHtUqkuIA-okDEPI0_5fZLU6lZ6Exz6DK4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBWoiMOhzApzXey4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBVoiMOhzAQPzXey4

예 2: 사용자 지정 열거형 정의 사용

이 예에서는 사용자 정의 상수 값으로 열거형을 정의하는 방법을 배웁니다. 또한 이 예제는 사용자 정의 상수 초기화가 임의의 순서로 수행될 수 있는 방법을 이해하는 데 도움이 됩니다. 이 예에서는 1에 대한 상수 값을 명시적으로 정의했습니다.그리고 3rdenum 요소(각각 IO_ERROR 및 NETWORK_ERROR)가 있지만 2에 대한 명시적 초기화를 건너뛰었습니다.NS그리고 4NS집단. 이제 기본값을 2에 할당하는 것은 컴파일러의 책임입니다.NS그리고 4NSenum 요소(즉, 각각 DISK_ERROR 및 PRINT_ERROR). DISK_ERROR는 값 3에 할당되고 PRINT_ERROR는 값 9에 할당됩니다. 아래에서 예제 프로그램과 출력을 볼 수 있습니다.

#포함하다

/* 열거형 정의 - 사용자 정의 초기화*/
열거오류{
IO_ERROR= 2,
DISK_ERROR,
네트워크 오류= 8,
PRINT_ERROR
};

정수기본()
{

/* 열거형 변수 선언*/
열거오류 Hw_Error;

인쇄 ('Hw_Error를 IO_ERROR로 설정N');
Hw_Error=IO_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 DISK_ERROR로 설정N');
Hw_Error=DISK_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 NETWORK_ERROR로 설정N');
Hw_Error=네트워크 오류;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 PRINT_ERROR로 설정N');
Hw_Error=PRINT_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

반품 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhumn4IzqhkN4qF9HcuGZ9thqlBly6wzxvl2F-FU

예제 3: 상수 표현식을 사용한 열거형 정의

이 예제에서는 상수 표현식을 사용하여 열거형 요소에 대한 상수 값을 정의하는 방법을 배웁니다.

#포함하다

/* 열거형 정의 - 상수 표현식을 사용한 사용자 정의 초기화
상수 표현식은 다음과 같은 경우에 사용됩니다.
NS. IO_ERROR 및
NS. 네트워크 오류
이것은 enum 요소를 정의하는 특이한 방법입니다. 그러나, 이
프로그램은 이러한 방식의 열거형 요소 초기화가 c에서 가능함을 보여줍니다.
* /


열거오류{
IO_ERROR= 1 + 2 * + 4,
DISK_ERROR,
네트워크 오류= 2 == 2,
PRINT_ERROR
};

정수기본()
{

/* 열거형 변수 선언*/
열거오류 Hw_Error;

인쇄 ('Hw_Error를 IO_ERROR로 설정N');
Hw_Error=IO_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 DISK_ERROR로 설정N');
Hw_Error=DISK_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 NETWORK_ERROR로 설정N');
Hw_Error=네트워크 오류;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 PRINT_ERROR로 설정N');
Hw_Error=PRINT_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

반품 0;
}

https://lh4.googleusercontent.com/9FAbPOnM95LiP_UQvg40oHSW4sv34aqpFgasbHMiy06Z_rKEom81TuMCVsfxWaZedtQOMEQx7ef_5qEfRVcNrUvhitDzOcTvOilby4

예 4: 열거형 범위

이 예에서는 enum에 대해 범위 지정 규칙이 작동하는 방식을 배웁니다. MACRO(#define)를 사용하여 열거형 대신 상수를 정의할 수 있었지만 범위 지정 규칙은 MACRO에 대해 작동하지 않습니다.

#포함하다

정수기본()
{

/* 열거형 정의 */
열거오류_1{
IO_ERROR= 10,
DISK_ERROR,
네트워크 오류= ,
PRINT_ERROR
};


{

/* 내부 범위에서 열거형 유형 정의*/
열거오류_1{
IO_ERROR= 스물,
DISK_ERROR,
네트워크 오류= 35,
PRINT_ERROR
};

/* 열거형 변수 선언*/
열거Error_1 Hw_Error;
인쇄 ('Hw_Error를 IO_ERROR로 설정N');
Hw_Error=IO_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 DISK_ERROR로 설정N');
Hw_Error=DISK_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 NETWORK_ERROR로 설정N');
Hw_Error=네트워크 오류;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);

인쇄 ('NHw_Error를 PRINT_ERROR로 설정N');
Hw_Error=PRINT_ERROR;
인쇄 ('Hw_Error 값 = %dN',Hw_Error);
}
반품 0;
}

열거형과 매크로의 비교

열거 매크로
enum에 범위 지정 규칙이 적용됩니다. 매크로에는 범위 지정 규칙이 적용되지 않습니다.
기본 Enum 값 할당은 자동으로 발생합니다.

열거형은 많은 수의 상수를 정의하는 데 매우 유용합니다. 컴파일러는 기본 상수 값 초기화를 사용합니다.

매크로 상수 값은 항상 프로그래머가 명시적으로 언급해야 합니다.

매크로를 정의하는 동안 프로그래머는 항상 각 상수 값을 수동으로 정의해야 하기 때문에 이것은 많은 수의 상수에 대해 지루한 프로세스가 될 수 있습니다.

결론

C의 열거형 프로그램은 프로그래머가 항상 열거형 대신 매크로를 사용할 수 있기 때문에 독립 실행형 프로그램이나 소규모 프로젝트에 대한 선택적 방법으로 간주될 수 있습니다. 그러나 숙련된 프로그래머는 대규모 소프트웨어 개발 프로젝트에서 매크로보다 열거형을 사용하는 경향이 있습니다. 이것은 깨끗하고 읽기 쉬운 프로그램을 작성하는 데 도움이 됩니다.