상수를 정의하는 방법은 #define을 통하여 상수를 정의하거나, const 예약어를 통하여 선언을 합니다.

#define TRUE	1
#define FALSE   0

const int SUN = 0;
const int MON = 1;
const int TUE = 2;
const int WED = 3;
const int THE = 4;
const int FRI = 5;
const int SAT = 6;

위와 같이 #define 또는 const를 이용하여 상수를 선언할 수 있습니다. 그러나, 위의 상수를 선언한 방식을 보면 TRUE, FALSE는 서로 연관은 있어보이고, 아래의 요일들끼리는 서로 연관관계가 있어보입니다. 단지, 쭉 나열되어 있고 또한 이름으로 같은 종류구나라는 느낌이 있을 뿐입니다. 위의 예와 같이 서로 관련이 있는 상수들을 모아서 새로운 타입을 정의하는 것을 열거형(enum)이라고 합니다.

 

열거형(enum) 정의

enum 열거형명
{
    상수1 = 초기화값1,
    상수2 = 초기화값2,
    ....
    상수n = 초기화값n
};

의 형식으로 상수들을 정의합니다.

 

enum BOOLEAN
{
    TRUE = 1,
    FALSE = 0
};

enum WEEKDAY
{
    SUN = 0,
    MON,
    TUE,
    WED,
    THE,
    FRI,
    SAT
};

위와 같이 상수들을 정의할 수 있습니다. BOOLEAN처럼 각각의 멤버들에 초기화를 할수도 있고, 첫번째 멤버만 값을 주면 그 이후의 멤버들은 각각 1씩 증가하게 됩니다. 중간에 값을 바꾸면 그 다음 변수는 앞에 초기화된 값이후로 1씩 증가하는 식으로 설정이 됩니다. 각 멤버 상수들은 세미콜론(;)이 아닌 나열연산자(,)로 나열합니다.

 

이를 사용하기 위해서는 struct나 union과 달리 멤버 참조 연산자를 사용하지 않고 그냥 멤버들을 상수로 사용합니다. 마찬가지로 typdef로 타입을 정의할 수도 있습니다.

typedef enum 
{
    TRUE = 1,
    FALSE = 0
} BOOLEAN;

typedef enum 
{
    SUN = 0,
    MON,
    TUE,
    WED,
    THE,
    FRI,
    SAT
} WEEKDAY;

또한 enum을 정의할 때에 이름없이 선언할 수도 있습니다. 어차피 사용할 때에 상수 자체를 사용하기 때문에 이름이 없어도 상관이 없는 것입니다. 이름을 주는 이유는 무슨 상수 그룹인지에 대한 의미를 부여하기 위함이라고 생각하면 됩니다.

 

 

#include <stdio.h>

typedef enum 
{
    SUN = 0,
    MON,
    TUE,
    WED,
    THE,
    FRI,
    SAT
} WEEKDAY;

void display(WEEKDAY week)
{
    switch(week) {
        case SUN :
            printf("today is a sunday.\n");
            break;
        ....
}

위와 같이 WEEKDAY라는 타입을 만들었으며, 이를 변수의 타입으로 사용이 가능합니다.

 

그러나, 열거형(enum)은 문제점도 있습니다. 위와 같이 display()함수의 파라미터가 WEEKDAY 타입이면 단순히 int로 인식할 뿐 다른 값(0 ~ 6이외의 값)을 입력한다고 해서 오류가 발생하거나 체크를 하지 않습니다. 다만 WEEKDAY 타입이니 SUN ~ SAT 값들을 사용하겠구나라는 정도의 인식을 가지게 할 뿐입니다.

 

typedef enum 
{
    TRUE = 1,
    FALSE = 0
} BOOLEAN;

typedef int BOOLEAN;

#define TRUE  1
#define FALSE 0

이 정도의 의미만 있을 뿐입니다.

 

 

 

 

 

C Programming Language 문법

1. C 프로그래밍 언어는? 2. C언어 개발 환경 (실습 환경) 3. C언어의 컴파일 과정 4. C 소스 파일 구성 5. 주석문(Comment) 6. 식별자 명명 규칙 7. C 프로그래밍의 시작 - 함수 8. 변수와 상수 (정수형) 9. 변..

www.it-note.kr

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

Tag ,

댓글을 달아 주세요