열거형

namu·2022년 7월 3일
const int SCISSORS = 1;
const int ROCK = 2;
const int PAPER = 3;

enum ENUM_SRP
{
	ENUM_SCISSORS = 1,
    ENUM_ROCK,
    ENUM_PAPER
};

const 변수는 주소를 참조하는 경우, 스택에 선언하는 경우 외에는 컴파일러가 메모리상에 정의를 안하고 매직넘버로 치환시킬 수 있다.

enum은 컴파일 단계에서 매직넘버로 대체된다.

#이 붙은 거 -> 전처리 지시문
#include<'iostream'>이라는 파일을 찾아서 해당 내용을 그냥 복붙
1) 전처리 2) 컴파일 3) 링크
#define DEFINE_SCISSORS 1
#define DEFINE_TEST cout << "Hello World" << endl;
#define DEFINE_SUM 1 + 2
연산 실수 유발, 디버깅 불편

디버깅 시 이미 전처리, 컴파일, 링크 단계를 모두 거친 상태이기 때문에 define으로 명명한 부분은 더이상 존재하지 않고, 대응되는 코드로 치환된 상태이며, define으로 명명한 부분이 어떠한 의미를 지녔는지 알려면 정의된 코드를 확인해야 한다.
enum으로 정의한 상수는 디버깅 시 상수가 어떤 값을 가지는지 쉽게 알 수 있다.
물론, enum 상수도 컴파일 시 매직넘버로 치환되는 건 마찬가지다.
하지만, 개발 단계에서 좀 더 도움이 된다는 점에 차이가 있다.

profile
안녕하세요

0개의 댓글