전처리기(Pre-Processor)

  • 3 minutes to read

전처리기는 단어 그대로 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

코드: 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 파일 생성

IncludeDemo.c max function

코드: 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 언어 코드 외부에서 컴파일러 설정 값으로 들어오는 조건에 따라서 다르게 컴파일할 때 사용될 수 있습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com