전처리기
- 컴파일러의 한 부분
- 소스 파일을 처리해 수정된 소스 파일을 생산.
종류
- #define : 매크로 정의
- #include : 파일 포함
- #undef : 매크로 정의 해제
단순 매크로
c
#define MAX_SIZE 100
함수 매크로
매크로가 함수처럼 매개변수를 가지는 것.
좀 더 함수에 비해 수행 속도가 빠르다.
c
#define SQUARE(x) ((x) * (x))
// 반드시 괄호를 이용해 정의해야 한다.
int main() {
SQUARE(3);
}
내장 매크로
c
printf("%s\n", __DATE__); // 소스를 컴파일된 날짜로 변환
printf("%s\n", __TIME__); //
printf("%s\n", __LINE__); //
printf("%s\n", __FILE__); //
조건부 지시자
어떠한 조건을 만족한 경우에만 지정된 소스 코드 블록을 컴파일
c
#ifdef DEBUG
printf("")
#endif
DEBUG가 정의되어 있다면 #ifdef와 #endif 사이의 코드를 실행한다.
c
#define DEBUG 3
int main() {
#ifdef DEBUG
printf("")
#endif
}
다중 소스 파일
코드를 파일 여러개로 나눠 놓는 것.
c
// main.c
#include <stdio.h>
#include "power.h"
int main() {
int x, y;
scanf("%d", &x);
scanf("%d", &y);
printf("%d", power(x,y))
}
c
// power.c
#include "power.h"
double power(int x, int y) {
double result = 1.0;
for (int i = 0; i < y; i++) {
result *= x;
}
return result;
}
c
// power.h
// power.c에 대한 헤더파일
#pragma once
double power(int x, int y);
헤더 파일을 사용하지 않으면, 함수 원형이 여러 소스파일에 존재하여야 하므로 같은 내용이 중복되어 비효율적이다.
헤더 파일에 함수들의 원형을 넣어두고 다른 소스파일에서 헤더파일을 포함하는 방법을 사용하면 몇 안되는 내용으로 원형을 모두 활용할 수 있는 구조가 형성되므로 효율적이라 할 수 있다.
헤더 파일에는 일반적으로 함수의 원형 말고도 구조체 정의, 매크로 정의, typedef 정의 등의 내용을 작성한다.
외부변수를 선언할 때에는 extern 키워드를 사용함으로써 선언할 수 있다.