본문 바로가기

근성 Program/C & C++

#include , #define , #ifdef .. #endif #ifndef~#endif


C언어는 컴파일 과정에서 제일먼저 전처리(preprocessing)과정을 거친다
이를 수행하는 부분을 전처리기(preprocessor)라고한다.
#으로 시작되는 구문은 전처리기에게 전처리기 지시자로써 인식되고
그에 해당하는 일이 전처리기에 의해서 수행된다.

크게 3가지로 나눌수 있다.

가장 먼저 #include 전처리기 지시자이다

#include <stdio.h>을 봤을 것이다.
이경우 stdio.h라는 이름을 가진 프로그램 소스의 내용을 첨가하겠다는 것이다
기본 재공 코드는 특정위치에 지정 되어 있기 때문에 <>로 묶어서 사용할 경우
특정위치로 가서 불러 오게 된다

하지만 사용자가 만든 헤더 파일일 경우는 " "로 묶어서 사용해야 한다
#include "TEST"처럼 사용해야 한다

두번째는

#define 이다  매크로라고 불리는 부분이다

#define은 치환의 역활을 하는데

#define MAXSZIE  5000      이라고 정의한다했을 경우

코드 중에 MAXSIZE를 5000으로 치환시켜주는 역활을 한다

그 외에도 
#defien X(x)  (x)*(x)
라고 하면 

코드 중 X(10) 이라는 코드가 있을 경우
10*10을 하여 100으로 치환이 가능하다

#undef 라는 것도 있는데 이는 #define으로 정의된 것을 해제 할때 사용된다
#undef X(x)를 사용하면
다음 라인 부터의 코드에서 X(x)라는 코드를 치환하지 않게 된다

마지가 세번째는

조건부 번역이다 조건부 번역은 특정조건이 성립할 경우
프로그램의 소스의 일부분을 치환, 제어 할 수 있는 역활을 한다


기본적으로
#if (제어식1)
.....
#elseif(제어식2)
....
#else
.....
#endif
이다 단지 if문앞에 #추가한 형태이다
C언어의 if문처럼 이해하면 된다 단 {}대신  마지막에 #endif로 끝내야 한다
이는 기본적인 C언어 제어식,, if, elseif, else 와 같이 이해하면됩니다.

 #ifdef 이라는 것도 있다  #if define 이라는 의미이다

#ifndef 은  #if not define 의 의미로 #if !defined가 같은 표현으로 있다
#ifdef, #ifndef는 기본적으로 중복해서 헤더파일을 불러오지 않도록 방지하는데 많이 쓰인다.
예를 들어

#ifndef MAXSIZE
#define MAXSIZE 5000
#endif
라는 코드르 보자 MAXSIZE라는 메크로가 중복으로 사용되지 않도록 검사를 한다 만약 사용하고 있다면 
중복 정의를 방지 하게 되고 없다면 새로 정의 된다는것이다 

두가지 이상의 복함 조건에는 #if문이 더욱 효과적이라고 할수 있다.
#if deinfe(PRINT) && !define(MAXSIZE)
.....
#endif