프로그래밍/C
enum vs #define vs const
code cat
2012. 2. 5. 07:53
상수를 사용 할 일이 있을 때, 프로그래밍 언어(c vs c++)가 어느거냐에 따라서 호불호가 갈릴 수도 있겠지만 되도록 #define은 피하는게 좋다는 것은 변함이 없겠다.
#define은 전처리기에서 정의된 문자가 정의된 값으로 바뀌어서 처리된다.
예를 들어
#define BUF_SZ 1024
char buf[BUF_SZ];
라고 하면 전처리기의 실행 후에는
#define BUF_SZ 1024
char buf[1024];
라고 바뀐다. 이 후의 컴파일 과정에서는 BUF_SZ라는 매크로 심볼을 참조 할 수 없다. 여기서 발생할 수 있는 문제가 보통 컴파일러는 이 매크로 이름을 디버거로 넘겨주는 심볼 리스트에 포함시키지 않는다.
gcc 의 경우, -g3으로 매크로 정보를 포함시킬 있다.
또한 매크로는 scope에 대한 조절을 하기 어렵다. 예를 들어,
int getFoo(void)
{
#define LOCAL_VAL 124
....
}
는 지역적 scope를 가지지 않는다.
iPhone 에서 작성된 글입니다.
#define은 전처리기에서 정의된 문자가 정의된 값으로 바뀌어서 처리된다.
예를 들어
#define BUF_SZ 1024
char buf[BUF_SZ];
라고 하면 전처리기의 실행 후에는
#define BUF_SZ 1024
char buf[1024];
라고 바뀐다. 이 후의 컴파일 과정에서는 BUF_SZ라는 매크로 심볼을 참조 할 수 없다. 여기서 발생할 수 있는 문제가 보통 컴파일러는 이 매크로 이름을 디버거로 넘겨주는 심볼 리스트에 포함시키지 않는다.
gcc 의 경우, -g3으로 매크로 정보를 포함시킬 있다.
또한 매크로는 scope에 대한 조절을 하기 어렵다. 예를 들어,
int getFoo(void)
{
#define LOCAL_VAL 124
....
}
는 지역적 scope를 가지지 않는다.
iPhone 에서 작성된 글입니다.