상수를 사용 할 일이 있을 때, 프로그래밍 언어(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 에서 작성된 글입니다.
'프로그래밍 > C' 카테고리의 다른 글
file에서 읽어와 strtok을 이용해 struct에 저장하기 (2) | 2012.02.28 |
---|---|
C의 역사 (0) | 2012.02.19 |
enum 타입 c vs c++ (0) | 2012.02.04 |
system vs exec (0) | 2012.01.30 |
process & signal (0) | 2012.01.25 |