#ifdef .. 을 잘 사용하면 프로그램의 오류를 쉽게 발견 할 수 있다 - 2009/02/09 16:45

헤더파일의 중복을 막기 위하여 통상 헤더파일의 선두, 후미에 대개 다음과 같은 정의가 선언되어 있는것을 보게 된다.


#ifndef __HEADERFILE__
#define __HEADERFILE__
내용. . . .
#endif __HEADERFILE__
본 칼럼에서는 #ifdef 의 또 다른 사용 예를 하나 보인다.

설명을 위하여 사용된 다음의 예는 ARM의 CORE 클럭을 설정하는데 사용되는 파라미터를 디파인 상수로 정의토록 하고 있다. 이때 사용자의 부주의로 CLOCK(FCLK) 값을 세팅 하는것을 빼먹었을 경우에 이를 빨리 찾아낼 수 있도록 적색부의 코드를 추가하여 넣어 놓았다.

이렇게 처리하면 사용자가 부주의로 __MAX_CLOCK_xxxMHZ__을 정의하지 않았을 경우에 컴파일러는 적색부의 코드를 포함시키므로 이때 에러가 발생하게 된다.

글로 적어서 설명하려니 어려운데 다음의 코드와 유사하게 만들어서 컴파일해보면 더욱 쉽게 이해 할 줄로 믿는다.
 
/* keyword : ClockParameter */
/***************  Clock Parameter  **********/
#if defined (__MAX_CLOCK_270MHZ__)
#define  FCLK 270000000
#elif defined (__MAX_CLOCK_260MHZ__)
#define  FCLK 260000000
#elif defined (__MAX_CLOCK_250MHZ__)
#define  FCLK 250000000
#elif defined (__MAX_CLOCK_240MHZ__)
#define  FCLK 240000000
#elif defined (__MAX_CLOCK_230MHZ__)
#define  FCLK 230000000
#elif defined (__MAX_CLOCK_220MHZ__)
#define  FCLK 220000000
#elif defined (__MAX_CLOCK_210MHZ__)
#define  FCLK 210000000
#elif defined (__MAX_CLOCK_200MHZ__)
#define  FCLK 200000000
#else
printf("[WARNING]Not configured CLOCK\n");
#endif
 
조금 수고스럽더라도 위의 코드를 더 자세하게 그림을 통하여 설명해 보겠다.
위의 내용을 이미 이해한 분은 아래의 내용을 읽지 않아도 무방하겠다.

예제1) 정상적인 경우

 
예제2)실수로 정의(#DEFINE)을 생략한 경우

 
해당 코드를 컴파일 해 보면 위의 그림처럼 컴파일러는 컴파일 오류를 발생하고 그림에 작은 화살표가 보이는가? 에러가 난 위치를 보여준다. 이제 사용자는 오류의 원인을 쉽게 파악하고('[WARNING]Not configured CLOCK\n");') 수정 할 수 있게 되었다.

대단한 테크닉은 아니지만 이러한 방법들을 통해서 더욱 코드는 풍성 해 지며 견고 해 지고 또한, 이러한 기법은 컴파일러와 상호 인터랙티브한 환경으로 자신의 개발 환경을 가꾸어 가는 하나의 사례가 된다.
 
-홍익컴닷컴-
http://www.hongikcom.com 
 
♡ 포스팅이 유익 하셨다면 E-mail로 가일의 임베디드 스쿨을 구독하세요->

Trackback Address :: http://www.hongikcom.com/trackback/9 관련글 쓰기
Name
Password
Homepage
Secret
< PREV |  1  |  ...  120  |  121  |  122  |  123  |  124  |  125  |  126  |  127  |  128  |  ...  131  |  NEXT >