연속적인 수를 가지는 상수들이 필요할 때 enum을 이용하면 편하다. 

또한 #define을 연속해서 쓰는것보다 가독성에서도 유리하다.

enum 

enum 이름{멤버1, 멤버2, ...};

enum Alphabet{
    A = 0,
    B,
    C,
    D
};

 

위와 같이 enum을 선언하면 enum의 멤버인 A, B, C, D는 각각 0, 1, 2, 3의 수를 가지는 상수가 된다. A를 0으로 선언했기 때문에 A 이후의 멤버들은 직전 멤버의 값에서 +1 된다.

#include <stdio.h>

enum Alphabet{
    A = 0,
    B,
    C,
    D
};

int main(){
    printf("%d\r\n", A); // print : 0
    printf("%d\r\n", B); // print : 1
    printf("%d\r\n", C); // print : 2
    printf("%d\r\n", D); // print : 3
}

 

'A = 0'대신 'A'로 쓰면 A는 0으로 자동 치환된다. 그러나 아직까지 'A'만 써준 경우는 못 봤으며 가독성 향상을 위해 다들 써주시는 것 같다.

#include <stdio.h>

enum Alphabet{
    A,
    B,
    C,
    D
};

int main(){
    printf("%d\r\n", A); // print : 0
    printf("%d\r\n", B); // print : 1
    printf("%d\r\n", C); // print : 2
    printf("%d\r\n", D); // print : 3
}

 

A를 4로 선언하면 A, B, C, D는 각각 4, 5, 6, 7이 된다.

#include <stdio.h>

enum Alphabet{
    A = 4,
    B,
    C,
    D
};

int main(){
    printf("%d\r\n", A); // print : 4
    printf("%d\r\n", B); // print : 5
    printf("%d\r\n", C); // print : 6
    printf("%d\r\n", D); // print : 7
}

 

값을 명시해주지 않은 상수만 직전 상수에서 +1 된다.

#include <stdio.h>

enum Alphabet{
    A,
    B,
    C = 8,
    D
};

int main(){
    printf("%d\r\n", A); // print : 0
    printf("%d\r\n", B); // print : 1
    printf("%d\r\n", C); // print : 8
    printf("%d\r\n", D); // print : 9
}

 

사용 예

함수의 리턴값 정의

enum Alphabet{
    RET_SUCCESS = 0,
    RET_EMPTY,
    RET_OVERFLOW,
    RET_UNDERFLOW
};