본문 바로가기
프로그래밍 언어/C

[C 언어] 전처리기

by nahkim 2023. 5. 18.

전처리기(preprocessor)

컴파일 이전 C 프로그램을 수정해주는 소프트웨어

전처리기는 전처리 지시자에 의해 제어된다

전처리 지시자

: #으로 시작하는 명령어

ex) #define, #include

#define 지시자는 매크로(macro)를 정의한다.

매크로(macro)란?

: 상수나 자주 사용하는 표현식과 같이 다른 이름으로 대체한 이름

ex) N을 10으로 사용

test.c

#include <stdin.h>
#define N 10

int main(void)
{
    printf("%d", N);
    return 0;
}
> gcc -Wall -Wextra -Werror test.c
> ./a.out
10%

전처리기의 출력물을 보고싶을 경우 gcc에서 -E 옵션 사용

전처리기의 출력물을 확인하는 이유

: 전처리기가 지시자를 처리하면서 잘못된 프로그램을 만들 수 있음 -> 오류를 찾아내기 어렵다 -> 해결방법 : 전처리기의 출력물을 확인하여 오류를 찾는다.

 

전처리기 작동 방식

#include 지시자를 통해 특정 파일을 열고 그 내용물을 컴파일할 파일에 추가 include해준다.

ex)

#inlcude <stdio.h>    // 표준 입출력 함수 모음

<그림>

  • C program - test.c파일이며, 전처리기(Preprocessor)에 입력으로 들어간다.
  • 전처리기(Preprocessor) - 지시자들과 띄어쓰기나 탭(불필요한 공란 문자)을 코드에서 제거해주고 해당 지시자의 역할을 실행해준다.
  • Modified C program - 지시자가 제거된 수정본
  • 컴파일러(Compiler)에 들어감 - 프로그램에 오류가 있는지 확인 후 다음 목적 코드(Object code)로 번역함

 

전처리 지시자 종류

  • 매크로 정의 (macro definition)
  • 파일 추가 (file inclusion)
  • 조건부 컴파일 (conditional compilation)
  • 기타 지시자

 

매크로 정의 (macro definition)

: #define, #undef

 

파일 추가 (file inclusion) - 특정 파일의 내용을 프로그램에 추가

: #include

 

조건부 컴파일 (conditional compilation)

: #if, #ifdef, #ifndef, #elif, #else, #endif

 

지시자 공통 규칙

  • # 기호로 시작한다.
  • 지시자 토큰 사이에는 띄어쓰기와 수평탭이 임의의 개수만큼 들어갈 수 있다. (전처리기에 들어가면 공백 제거됨)
  • 명시적으로 이어붙이지 않는 한 반드시 첫번째 개행문자로 끝나야한다.
    • 한 줄 이상으로 사용하려면 \ 문자를 사용한다.
  • 위치를 신경쓰지 않는다. (맨 윗줄에 써도 되고 중간에 써도 되고 마지막줄에 써도 된다.)
  • 주석 사용은 같은 줄에 사용 가능하다.

 

 

참조 : https://wikidocs.net/86262

'프로그래밍 언어 > C' 카테고리의 다른 글

[C] 컴파일 과정  (0) 2023.05.20
[C] 매크로(macro)  (0) 2023.05.18