전처리기(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
지시자 공통 규칙
- # 기호로 시작한다.
- 지시자 토큰 사이에는 띄어쓰기와 수평탭이 임의의 개수만큼 들어갈 수 있다. (전처리기에 들어가면 공백 제거됨)
- 명시적으로 이어붙이지 않는 한 반드시 첫번째 개행문자로 끝나야한다.
- 한 줄 이상으로 사용하려면 \ 문자를 사용한다.
- 위치를 신경쓰지 않는다. (맨 윗줄에 써도 되고 중간에 써도 되고 마지막줄에 써도 된다.)
- 주석 사용은 같은 줄에 사용 가능하다.
'프로그래밍 언어 > C' 카테고리의 다른 글
[C] 컴파일 과정 (0) | 2023.05.20 |
---|---|
[C] 매크로(macro) (0) | 2023.05.18 |