본문 바로가기
C언어/C언어

[C언어]전처리(Preprocessing) 단계

by Oliver_Candy 2023. 2. 16.

 


 

전처리 단계에 대해서 설명해 보겠다.

전처리 과정의 뜻은 대략적으로 소스코드를 확장된 소스 코드(=트랜스레이션 유닛)로 바꿔주는 과정을 말한다.

이전 글에서도 간단하게 #include 가 어떤 식으로 작동하는지를 보여줬는데

모든 #으로 시작하는 매크로는 아래와 같은 방식으로 작동되니 알고 있으면 될 것 같다.

 

 전처리 과정

  1. 입력 : C파일 하나
  2. 주석제거 : C파일에 있는 모든 주석을 제거해 주는 작업을 한다.
  3. 매크로를 복붙(확장)함
    • #으로 시작하는 것들을 매크로라고 하는데, 이 매크로들은 전부다 복붙을 한다고 보면 된다.
    • 확장 : (#include "헤더파일")을 지우고 그 자리에 헤더파일 속에 있는 내용을 복사해서 가져다 붙인다.
      • 인클루드는 꼭 헤더파일만 하는 것은 아니다 .c 파일도 가능하지만 컴파일을 빠르게 하는 목적으로 목적을 가지고 하는 것임을 알고 인클루드 하자 일단 표준은 헤더파일만 인클루드 하는 것이다 ( 더 궁금하면 '유니티 빌드' 찾아볼 것)
      • 복붙과정은 헤더파일 크기 상관없이 하는 것이다. ( 크키가 커도 상관없이 복붙 됨 stdio.h 도 엄청 크기가 크다)
  4. 출력 : 확장된 소스코드
    • 컴파일의 기본단위인 트랜스레이션 유닛(translation unit)이 출력된다.

 

 

 

 

 트랜스레이션 유닛 보는 방법

  • clang 컴파일 코드에서 "-E"플래그를 넣으면 된다
  • 트렌스레이션 유닛의 결과는 화면에 나온다
    • 파일로 저장하려면 출력 리디렉션(output rediretion) 하면 된다
clang -std=c89 -W -Wall -pedantic-errors -E main.c > main.pre

이렇게 작성하면 .pre파일로 저장이 된다.

복붙과정은 헤더파일 크기가 상관없이 하는 것이라고 말했는데, 궁금하다면 stdio.h 헤더파일을 인클루드 하고 트랜스레이션 유닛을 한번 보면 얼마나 긴 트랜스레이션 유닛이 나오는지 알 수 있다.

 

2023.01.09 - [POCU/COMP2200(C언어)] - [C]#include 의미 / 자료형 정리

 

[C언어]#include 의미 / 자료형 정리

#include 의미 1. 다른 파일에 구현된 함수나 변수를 사용할 수 있게 해준다. 2. #include 는 전처리기 지시문 중 하나 3. #include 는 컴파일 전에 텍스트를 복붙해주는 역할을 함 #include 가 작동되는 과정

olivertree-cs.tistory.com

 

 

출처 : POCU Academy COMP2200

댓글