오늘의 주제
#define
#ifdef
열 다섯번째 시간입니다.^^
지난 번에는 배열에 대해 알아보았는데, 흥미로우셨나요?
배열은 두고두고 계속 사용하게 되니까 잘 알아두셔야 합니다~
게다가 배열과 포인터는 뗄 수 없는 관계이므로 꼭 기억해 두세요 ㅎ
이번엔 전처리자에 대해 알아봅니다.
스따뚜!!!
전처리자
전처리자는 전처리 명령을 수행하는 녀석입니다.
전처리 명령은 '#
'으로 시작하게 됩니다.
우리가 흔히 볼 수 있는 전처리 명령에는 #include
가 있겠죠?
이 전처리 명령은 컴파일이 시작되기 전에 처리가 되게 됩니다.
그래서 이름이 전처리 명령이죠..^^
이 전처리 명령을 수행하는 전처리기는 C언어의 문법을 알지 못합니다.
어쨌든 이 전처리 명령은 우리가 잘만 활용을 하면 유용하게 사용할 수 있습니다^^
일단 처음에 소개할 녀석은
#define
이라는 녀석입니다.
간단한 예제로 시작해 볼게요~
#define
이라는 녀석은
define... 말 그대로 정의 해 주는 녀석입니다.
이녀석은 이거다!!! 이렇게요 ㅎ
선언 방법은
#define 이녀석 이거
입니다.
위의 그림을 보시면 MAX(a, b)
라는 녀석은 (a>b ? a :b )
라고 알아먹어라.
라는 이야기가 되지요.
위의 뜻이 이해가 안가신다구요? 3항연산자를 모르신다구요? 안돼요 ㅠㅠ
2012/01/28 - [C] - C <8>. 조건문(3) 3항 연산자
ㅋㅋ 여튼 define
해줄때 뿐만 아니라 모든 전처리 명령에서는 뒤에 세미콜론 (;
)을 붙이지 않습니다.
위의 예제를 실행해 봅시다.
이런 결과가 나오게 되네요~
#define
이라는 녀석 조금은 감이 오시나요?ㅎ
다음에는 char
형을 파라메터로 넣어 봅시다.
이렇듯이 define
하여 '매크로화' 된 녀석의 파라메터로 들어가는 값은 어떤 형식이든지 상관이 없습니다. 왜냐면 이 녀석은 C의 문법을 모르기 때문이지요.
그만큼 편리하지만 그만큼 무서운 녀석입니다.
잘못된 인자(파라메터)를 받고서도 무작정 실행 해 버리기 때문에 warning이나 error가 발생하지 않기 때문에 나중에 프로그램에 문제가 생겼을 때 그 원인을 찾기가 힘들어 집니다...
물론 위의 예제는 에러나 워닝의 요소는 아닙니다..^^;
자, 다음에 소개드릴 녀석은 #ifdef
라는 녀석입니다.
말 그대로 '만약 이녀석이 define 되어 있다면...' 이런 뜻입니다.
#ifdef 이녀석
이런 표현이 되겠지요?
우리가 if
를 쓸 때 else
라는 녀석이 따라왔지요. 여기서도 마찬가지 입니다~
#else
가 따라옵니다 ㅎ
거기에 덧붙여 #ifdef
를 끝마친다는 의미의 #endif
도 추가적으로 따라옵니다.
위의 그림에서는 MODE_DEBUG
가 #define
이 되어있기 때문에 #ifdef
안의 문장이 실행이 됩니다.
만약 MODE_DEBUG
가 #define
되어 있지 않다면 어떻게 되는지 봅시다.
요로코롬 #else
에 속해있는 녀석이 실행이 되겠지요..^^
이 #ifdef
같이 되어있는 녀석은 if와는 다른점이 컴파일 되기도 전에 해당사항이 없다면 컴파일 되지 않게 된다는 점입니다.
즉, 프로그램 안에 영영 속하지 않게 된다는 뜻이 겠지요~
그 다음에 살펴볼 녀석은
#undef
라는 녀석입니다.
말 그대로 define
되어 있던 녀석을 해제하는 녀석입니다.
예제를 통해 볼까요?
#define
으로 정의되어 있던 SUM(a, b)
라는 녀석을 define 해제시키고 새로 define한 예제입니다. 지난 define값이 없어지고 새로 define 되었지요..^^
이 외에도 ifdef
말고도
#if
#ifelse
등을 쓸 수도 있습니다.
한 번 시도해 보세요~^^
그러나 이 전처리자의 무서움은 C문법을 알고있지 않다는 점에 있습니다.
함부로 사용하게 되면 복잡한 프로그램에서는 피를 보는 결말을 보게되지요..^^;
그러므로 적절히 사용하는 것이 좋습니다.
이 전처리 명령을 대체할 수 있는 방법들이 몇 가지 있습니다.
enum
을 사용해도 좋고, const
변수를 사요해도 좋습니다.
물론 꼭 define
을 사용해야 하는 경우도 생기지만 말입니다~
위의 그림을 보고 코드를 이해해 보세요..^^
구글링을 해 보셔도 좋습니다~
전처리 명령은 잘만 사용하면 효과적인 프로그래밍에 많은 도움이 됩니다.
꼭 기억해 두세요~^^
오늘은 여기 까지!
by yagom
p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.