전처리기
IT 위키
더 많은 작업
전처리기(Preprocessor, 선행처리기)는 컴파일러가 원시 프로그램을 번역하기 전에 매크로 확장, 다른 파일 포함, 조건부 컴파일 같은 글자 단위 처리를 먼저 해 주는 프로그램이다.
| 단계 | 하는 일 | 결과 |
|---|---|---|
| 전처리 | 매크로 확장, 헤더 파일 포함, 조건부 컴파일, 주석 제거 | 전처리된 원시 코드(.i) |
| 컴파일 | 어휘 분석 → 구문 분석 → 의미 분석 → 코드 생성 | 어셈블리 코드(.s) |
| 어셈블 | 어셈블리를 기계어로 | 목적 파일(.o, .obj) |
| 링크 | 목적 파일과 라이브러리를 묶는다 → 링커 | 실행 파일 |
| 지시자 | 하는 일 |
|---|---|
#include |
지정한 헤더 파일의 내용을 그 자리에 끼워 넣는다 |
#define / #undef |
매크로를 정의하거나 해제한다 |
#if #ifdef #ifndef #elif #else #endif |
조건에 따라 코드 일부만 컴파일한다 |
#pragma |
컴파일러에 따라 다른 지시를 준다 |
#error |
전처리 중에 오류를 내고 멈춘다 |
#include <stdio.h>
#define SQUARE(x) ((x) * (x)) /* 괄호가 없으면 SQUARE(a+1) 이 a+1*a+1 이 된다 */
int main(void) {
#ifdef DEBUG
printf("debug build\n");
#endif
printf("%d\n", SQUARE(3)); /* 전처리 뒤에는 ((3) * (3)) */
return 0;
}
매크로는 함수 호출이 아니라 글자 치환이라 인자를 괄호로 감싸지 않으면 연산 순서가 틀어진다.
- 내장 SQL 의 프리컴파일러는 호스트 언어 안의 SQL 문을 함수 호출로 바꾼 뒤 컴파일러에 넘긴다
- 웹의 CSS 전처리기(Sass, Less)는 변수·중첩 문법을 일반 CSS 로 바꾼다