오늘의 주제
1. #define
2. #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 형을 파라메터로 넣어 봅시다.
그만큼 편리하지만 그만큼 무서운 녀석입니다.
잘못된 인자(파라메터)를 받고서도 무작정 실행 해 버리기 때문에 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
twitter : @yagomsoft
p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.
RSS Feed 받기
↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓
'C' 카테고리의 다른 글
C <17>. 동적할당 (2) | 2012.05.18 |
---|---|
C <16>. 구조체 (2) | 2012.05.16 |
C <14>. 배열 (4) | 2012.05.11 |
C <13>. 변수의 범위 (0) | 2012.04.05 |
C <12>. 함수 (4) | 2012.04.02 |