Programming/C_C++

전처리기

gukbap 2011. 8. 17. 21:38
반응형
#define

1. 상수로 치환
2. 매크로의 역할    ex) #define PLUS(x) ((x) = (x) + (x))


#if

if와 같은 역할
 

ex>
#define A 1
#if A
//source
#else
//source2 

#endif

A가 1로 치환되었기에 #if의 조건검사식에서 참이되어서 source가 컴파일된다. 이 때 source2는 컴파일 되지 않는다. 
A를 0으로 해주면 source는 컴파일 되지 않는다. 이 때 source2는 컴파일 된다.


#ifdef 
#ifndef


#ifdef : 어떠한 값이 define되어 있는지 여부 확인

ex>
#define A 1
#ifdef A
//source
#endif

A가 define되어있기 때문에 source는 컴파일된다.


반대로 
#ifndef : 어떠한 값이 define되어 있는지 여부 확인

ex>
#ifndef FILENAME_H
#define FILENAME_H
//source
#endif

FILENAME_H가 정의되어 있지 않다면 source를 컴파일 한다.
위 코드는 헤더 파일이 중복되어 선언되지 않도록 할 때 자주 사용되는 방법이다.


defined()
여러개가 define되어 있는지 여부 확인. 

ex>

#if defined(DEBUG1) || defined(DEBUG2) || defined(DEBUG3)

  #define GEN_DEBUG(x) {printf x;}

#else

  #define GEN_DEBUG(x)

#endif

위 코드는 디버깅에 많이 쓰이는 방식이다. 



#undef
define된 것을 해제한다.

ex> 
#define LEVEL 1
le1 = LEVEL
#undef LEVEL
#define LEVEL 2
le2 = LEVEL

원래 define된 것을 다시 define하는 것은 컴파일 에러를 일으킨다. 고로 이때 #undef가 사용된다.

#error

전처리기가 해당 코드를 실행하게 되면 에러메시지를 출력시키고 컴파일 작업을 하지 않도록 한다.

ex>
#if !defined(__cplusplus)
#error C++ compiler required
#endif

#line
#line 뒤에 나오는 source 줄번호를 지정된 상수 값에서 시작하여 번호가 매겨지게 한다.

ex>
#line 500
//source

source가 500번째 라인에서 시작하게 된다.
반응형

'Programming > C_C++' 카테고리의 다른 글

C++에서의 파일 입출력 **  (0) 2011.08.18
전처리기 활용 **  (0) 2011.08.17
ture, false  (0) 2011.07.18
객체 초기화  (0) 2011.07.17
reference (참조자)  (0) 2011.07.14