logo

C의 열거형

C의 열거형은 열거형(enumerated type)이라고도 합니다. 정수 값으로 구성된 사용자 정의 데이터 유형이며 이러한 값에 의미 있는 이름을 제공합니다. C에서 enum을 사용하면 프로그램을 쉽게 이해하고 유지 관리할 수 있습니다. 열거형은 enum 키워드를 사용하여 정의됩니다.

다음은 C에서 열거형을 정의하는 방법입니다.

 enum flag{integer_const1, integer_const2,.....integter_constN}; 

위 선언에서 'N' 정수 상수를 포함하는 플래그로 명명된 열거형을 정의합니다. Integer_const1의 기본값은 0이고, Integer_const2는 1입니다. 선언 시 정수 상수의 기본값을 변경할 수도 있습니다.

예를 들어:

 enum fruits{mango, apple, strawberry, papaya}; 

망고의 기본값은 0, 사과는 1, 딸기는 2, 파파야는 3입니다. 이러한 기본값을 변경하려면 아래와 같이 하면 됩니다.

 enum fruits{ mango=2, apple=1, strawberry=5, papaya=7, }; 

열거형 선언

우리가 알고 있듯이 C 언어에서는 int, float, char 등과 같은 미리 정의된 유형의 변수를 선언해야 합니다. 마찬가지로 enum과 같은 사용자 정의 데이터 유형의 변수를 선언할 수 있습니다. enum 유형의 변수를 선언하는 방법을 살펴보겠습니다.

아래와 같이 status 유형의 열거형을 생성한다고 가정합니다.

 enum status{false,true}; 

이제 상태 유형의 변수를 만듭니다.

 enum status s; // creating a variable of the status type. 

위의 명령문에서는 상태 유형의 's' 변수를 선언했습니다.

변수를 생성하려면 위의 두 명령문을 다음과 같이 작성할 수 있습니다.

 enum status{false,true} s; 

이 경우 false의 기본값은 0이 되고, true의 값은 1이 됩니다.

간단한 enum 프로그램을 만들어 보겠습니다.

 #include enum weekdays{Sunday=1, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}; int main() { enum weekdays w; // variable declaration of weekdays type w=Monday; // assigning value of Monday to w. printf('The value of w is %d',w); return 0; } 

위 코드에서는 weekdays라는 열거형 유형을 생성하고 여기에는 7일 전체의 이름이 포함됩니다. 일요일에는 1개의 값을 할당했고, 다른 모든 이름에는 이전 값에 1을 더한 값이 부여됩니다.

산출

C의 열거형

열거형을 더 명확하게 이해하기 위해 또 다른 예를 보여드리겠습니다.

 #include enum months{jan=1, feb, march, april, may, june, july, august, september, october, november, december}; int main() { // printing the values of months for(int i=jan;i<=december;i++) { printf('%d, ',i); } return 0; < pre> <p>In the above code, we have created a type of enum named as months which consists of all the names of months. We have assigned a &apos;1&apos; value, and all the other months will be given a value as the previous one plus one. Inside the main() method, we have defined a for loop in which we initialize the &apos;i&apos; variable by jan, and this loop will iterate till December.</p> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-2.webp" alt="Enum in C"> <h3>Why do we use enum?</h3> <p>The enum is used when we want our variable to have only a set of values. For example, we create a direction variable. As we know that four directions exist (North, South, East, West), so this direction variable will have four possible values. But the variable can hold only one value at a time. If we try to provide some different value to this variable, then it will throw the compilation error.</p> <p>The enum is also used in a switch case statement in which we pass the enum variable in a switch parenthesis. It ensures that the value of the case block should be defined in an enum.</p> <p> <strong>Let&apos;s see how we can use an enum in a switch case statement.</strong> </p> <pre> #include enum days{sunday=1, monday, tuesday, wednesday, thursday, friday, saturday}; int main() { enum days d; d=monday; switch(d) { case sunday: printf(&apos;Today is sunday&apos;); break; case monday: printf(&apos;Today is monday&apos;); break; case tuesday: printf(&apos;Today is tuesday&apos;); break; case wednesday: printf(&apos;Today is wednesday&apos;); break; case thursday: printf(&apos;Today is thursday&apos;); break; case friday: printf(&apos;Today is friday&apos;); break; case saturday: printf(&apos;Today is saturday&apos;); break; } return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-3.webp" alt="Enum in C"> <p> <strong>Some important points related to enum</strong> </p> <ul> <li>The enum names available in an enum type can have the same value. Let&apos;s look at the example.</li> </ul> <pre> #include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf(&apos;The value of mango is %d&apos;, mango); printf(&apos;
The value of apple is %d&apos;, apple); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-4.webp" alt="Enum in C"> <ul> <li>If we do not provide any value to the enum names, then the compiler will automatically assign the default values to the enum names starting from 0.</li> <li>We can also provide the values to the enum name in any order, and the unassigned names will get the default value as the previous one plus one.</li> <li>The values assigned to the enum names must be integral constant, i.e., it should not be of other types such string, float, etc.</li> <li>All the enum names must be unique in their scope, i.e., if we define two enum having same scope, then these two enums should have different enum names otherwise compiler will throw an error.</li> </ul> <p> <strong>Let&apos;s understand this scenario through an example.</strong> </p> <pre> #include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf(&apos;The value of success is %d&apos;, success); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-5.webp" alt="Enum in C"> <ul> <li>In enumeration, we can define an enumerated data type without the name also.</li> </ul> <pre> #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-6.webp" alt="Enum in C"> <h3>Enum vs. Macro in C</h3> <ul> <li>Macro can also be used to define the name constants, but in case of an enum, all the name constants can be grouped together in a single statement. <br> For example, <br> # define pass 0; <br> # define success 1; <br> The above two statements can be written in a single statement by using the enum type. <br> enum status{pass, success};</li> <li>The enum type follows the scope rules while macro does not follow the scope rules.</li> <li>In Enum, if we do not assign the values to the enum names, then the compiler will automatically assign the default value to the enum names. But, in the case of macro, the values need to be explicitly assigned.</li> <li>The type of enum in C is an integer, but the type of macro can be of any type.</li> </ul> <hr></=december;i++)>

산출

C의 열거형

enum과 관련된 몇 가지 중요한 사항

  • 열거형 유형에서 사용 가능한 열거형 이름은 동일한 값을 가질 수 있습니다. 예를 살펴 보겠습니다.
 #include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf(&apos;The value of mango is %d&apos;, mango); printf(&apos;
The value of apple is %d&apos;, apple); return 0; } 

산출

C의 열거형
  • 열거형 이름에 값을 제공하지 않으면 컴파일러는 자동으로 0부터 시작하는 열거형 이름에 기본값을 할당합니다.
  • 또한 열거형 이름에 어떤 순서로든 값을 제공할 수 있으며 할당되지 않은 이름은 이전 값에 1을 더한 기본값을 얻게 됩니다.
  • 열거형 이름에 할당된 값은 정수 상수여야 합니다. 즉, 문자열, 부동 소수점 등과 같은 다른 유형이 아니어야 합니다.
  • 모든 열거형 이름은 해당 범위에서 고유해야 합니다. 즉, 동일한 범위를 갖는 두 개의 열거형을 정의하는 경우 이 두 열거형은 서로 다른 열거형 이름을 가져야 합니다. 그렇지 않으면 컴파일러에서 오류가 발생합니다.

예를 통해 이 시나리오를 이해해 보겠습니다.

 #include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf(&apos;The value of success is %d&apos;, success); return 0; } 

산출

C의 열거형
  • 열거에서는 이름 없이 열거된 데이터 유형을 정의할 수도 있습니다.
 #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } 

산출

C의 열거형

C의 열거형과 매크로

  • 매크로를 사용하여 이름 상수를 정의할 수도 있지만 열거형의 경우 모든 이름 상수를 단일 명령문으로 그룹화할 수 있습니다.
    예를 들어,
    # 패스 0을 정의합니다;
    # 성공 1을 정의합니다;
    위의 두 명령문은 enum 유형을 사용하여 단일 명령문으로 작성할 수 있습니다.
    열거형 상태{통과, 성공};
  • 열거형은 범위 규칙을 따르지만 매크로는 범위 규칙을 따르지 않습니다.
  • Enum에서 열거형 이름에 값을 할당하지 않으면 컴파일러는 자동으로 열거형 이름에 기본값을 할당합니다. 그러나 매크로의 경우 명시적으로 값을 할당해야 합니다.
  • C의 열거형 유형은 정수이지만 매크로 유형은 어떤 유형이든 될 수 있습니다.