프로그래밍/C2012. 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 에서 작성된 글입니다.

'프로그래밍 > 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
Posted by code cat