본문 바로가기
C

조건부 컴파일 #if #elif #else #endif

by 상레알 2009. 2. 11.

전처리 지시사 #if   #elif   #else    #endif 는 컴파일러 (정확히 이야기하면 전처리기)에게 조건을 제시하는 경우에 사용된다.

사용되는 형식
--------------------------
#if CONDITION1                
expression1
#elif CONDITION2
expression2
#else
expression3
#endif
---------------------------

위 형식은 다음과 같은 내용을 컴파일러에게 요구하는 것이다.
 "CONDIONT1이 만족되면 expression1을 , CONDITION2가 만족되면 expression2를 이도 저도 아니면 expression3를
  컴파일해라"

if ~ else if 문장과 상당히 유사한 형태를 지니고 있음을 알 수 있다.
다만 위의 문장은 전처리기에 의해 처리되기 때문에 컴파일 해야 할 대상을 지정할 때 사용하게 된다.

* 흔히 저지르는 실수 중 하나가 #endif 문장을 빼먹는 것이다. if ~ else if 문장과 달리 "여기까지입니다." 라고 정의를 해줘야
*  한다. 따라서 반드시 #endif가 포함되어야 한다.

참고*  일반적으로 함수의 정의를 헤더 파일에 포함시키지는 않는다 (선언만 헤더 파일에 포함한다.)!


0o 헤더 파일의 포함 관계에서 발생하는 문제 때문에 조건부 컴파일로 문제를 해결..한다.o0

-하나의 헤더 파일을 두 번 이상 포함
-이는 중보갷서 함수가 정의되거나, 변수가 선언되는 문제점
-조건부 컴파일로 문제 해결

#ifdef,           #endif 
if not define  

ex)

#ifdef  _COUNT_H_                         ->>  _COUNT_H 가 를 정의하지 않았다면
#define _COUNT_H_20         -- >>

int count=0                         ->>>      _COUNT_H를 정의하고 int 형 변수 count도 선언하고
#endif                                        ->>  끝낸다.



_COUNT_H_ 는 헤더 파일 이름을 이용하여 만든것이다 조건부 컴파일을 위한 매크로를 정의하는 경우 어떠한 이름을 주건 상관없지만 이름이 중복되어서는 안될것이다. 파일의 이름은 중복될일이 없으므로 이를 이용하는것은 좋은 방법이고 또 가장 보편화되어 있다.








'C' 카테고리의 다른 글

재지정( redirection) 이란  (0) 2010.11.23
포인터 개념  (0) 2010.06.11
공백포함 문자 입력  (0) 2009.05.07
구조체 포인터...  (0) 2009.04.07
파일 접근 모드  (0) 2009.03.31
라이브러리  (0) 2009.02.24
C 라이브러리 제작? 사용  (0) 2009.02.24
연산자 우선순위  (0) 2009.02.16
type redefinition 오류 해결법  (0) 2009.02.11
LValue 와 RValue 차이점  (0) 2009.02.10