전처리기(Pre-Processor)
전처리기는 단어 그대로 C 언어 프로그램을 컴파일하기 전에 미리(Pre) 처리(Process)하는 내용을 다룹니다. #include
와 #define
으로 소스 코드에서 사용할 외부 기능 또는 새로운 기능을 정의하는 내용이 전처리기입니다.
> // 전처리기: # 기호로 외부 파일 호출과 새로운 상수 또는 수식을 미리 정의하는 기능
전처리기
C 언어에서 프로그래머가 작성한 프로그램을 실행하기 위해서는 컴파일이 되어야 합니다. 컴파일러가 컴파일하기에 앞서서 미리 처리해야하는 외부 파일 참조 및 필요한 상수 및 수식 등을 정의하고 이를 컴파일할 때 사용할 수 있게 미리 처리하는 기능들을 전처리기(Pre-Process)라고 합니다.
전처리기 종류
C 언어에서 제공하는 전처리기는 가장 많이 사용하는 #include
와 #define
을 포함하여 #if
, #ifdef
, #elif
, #else
, #endif
, #ifndef
, #ifdef
, #undef
, #error
등이 있습니다.
#include
: 우리가 지금까지 많이 사용해 온 외부 파일에 정의된 기능에 대한 참조#define
: 사용자 정의 상수 또는 수식(매크로)을 손쉽게 작성할 수 있는 기능
전처리기 또는 전처리기 지시문은 하나의 문이지만 세미콜론을 붙이지 않습니다.
#include 지시문
#include
지시문은 지금까지 우리가 사용해 온 외부 기능(파일)에 대한 참조를 할 수 있습니다.
#include <stdio.h>
파일 형태로 내장된 기능을 가져다 쓴다던가, #include "사용자정의파일.h"
형태로 사용자가 정의한 파일을 참조할 경우에 사용됩니다.
#include <파일이름>
stdio.h
,stdlib.h
파일처럼 내장된 기능들 참조
#include "파일이름"
my.h
,custom.h
형태로 사용자 정의 기능들을 참조
그림: IncludeDemo 프로젝트 생성
코드: IncludeDemo.c
#include <stdio.h>
int max(int first, int second);
int main(void)
{
printf("MAX: %d\n", max(3, 5));
return 0;
}
int max(int first, int second)
{
return first > second ? first : second;
}
MAX: 5
그림: max.f 파일과 max.c 파일 생성
코드: max.h
int max(int first, int second);
코드: max.c
int max(int first, int second)
{
return first > second ? first : second;
}
코드: IncludeDemo.c
#include <stdio.h>
// max.h 파일로 이동
//int max(int first, int second);
#include "max.h"
int main(void)
{
printf("MAX: %d\n", max(3, 5));
return 0;
}
// max.c*** ```C 파일로 이동
//int max(int first, int second)
//{
// return first > second ? first : second;
//}
MAX: 5
TODO: 전처리기 지시문(Preprocessor Directive)과 조건부 컴파일
C 언어에서는 #define, #if, #esle, #endif 등을 사용하여 조건부 컴파일을 할 수 있습니다.
코드: DefineDemo.c
#define YES
class DefineDemo
{
int main(void)
{
#if YES
printf("YES");
#else
printf("NO");
#endif
}
}
YES
#define 기호를 사용하여 YES를 정의해 놓으면 #if YES 코드 영역이 실행됩니다. 이러한 기능은 C 언어 코드 외부에서 컴파일러 설정 값으로 들어오는 조건에 따라서 다르게 컴파일할 때 사용될 수 있습니다.