1. 선행처리기 (Preprocessor)
- 선행처리기는 사용자가 작성한 C 소스 코드를 기계어로 번역하기 전에 먼저 수행되는 일련의 처리 과정이다.
- 주된 역할은 코드의 간소화, 재사용성 향상, 이식성 개선 등이다.
- 이식성이란 코드가 다른 시스템이나 환경에서 얼마나 쉽게 작동할 수 있는지를 의미한다.
- 선행처리기는 이식성을 높이기 위한 도구로 사용된다.
⚠️ 선행처리기는 텍스트를 텍스트로 변환하는 반면, 컴파일러는 텍스트를 기계어로 변환한다.
1) 전처리 과정의 순서
⭕ 전처리와 컴파일 전체 흐름은 다음과 같다:
1️⃣ 소스 프로그램
⏩ 선행처리기
2️⃣ 선행처리된 소스 프로그램
⏩ 컴파일러
3️⃣ 목적 파일(.obj 등)
⏩ 링커
4️⃣ 실행 파일(.exe 등)
2) 전처리 지시자의 특징
- # 기호로 시작한다.
- 끝에 ;(세미콜론)를 사용하지 않는다.
- C 언어 문법의 영향을 받지 않는다.
- ⚠️ 한 줄이 넘는 명령어는 줄 끝에 ‘\’를 붙여 줄바꿈을 이어서 사용해야 한다.
주요 전처리 명령어
| 전처리기 | 설명 |
| #include | 외부 파일 포함 |
| #define, #undef | 매크로 정의 및 해제 |
| #if, #ifdef, #ifndef, #else, #elif, #endif | 조건부 컴파일 |
| #error, #line, #pragma | 기타 컴파일 지시 정보 제공 |
3) #include 사용법
- #include <파일명>
· 시스템 헤더 파일을 포함할 때 사용한다.
· 컴파일러가 지정한 표준 디렉토리에서 파일을 찾는다. - #include "파일명"
· 사용자 정의 헤더 파일 포함 시 사용한다.
· 현재 소스 파일이 위치한 디렉토리 또는 지정된 경로에서 먼저 찾는다.
✅ 예시:
#include <stdio.h> // 표준 라이브러리 포함
#include "myheader.h" // 사용자 정의 헤더 포함
- 사용자가 정의한 헤더 파일이 다른 디렉토리에 위치할 경우에는 경로까지 작성해야 한다.
⭕ 예시:
#include "..\headers\userstdio.h"
4) 헤더 파일 (Header File)
- 헤더 파일은 매크로 상수, 함수 원형, 라이브러리 선언 등을 모아둔 파일이다.
- 대부분 .h 확장자를 사용한다.
주요 표준 헤더 파일 종류:
| 헤더파일 | 설명 |
| alloc.h | 메모리 동적 할당 함수 |
| conio.h | 콘솔 입출력 함수 |
| ctype.h | 문자 검사 함수 |
| direct.h | 디렉토리 제어 함수 |
| dos.h | MS-DOS 제어 함수 |
| errno.h | 시스템 오류 코드 정의 |
| io.h | 저수준 파일 입출력 |
| math.h | 수학 함수 제공 |
| process.h | 프로세스 제어 함수 |
| stdio.h | 표준 및 파일 입출력 |
| stdlib.h | 수치 변환, 난수, 동적 할당 |
| string.h | 문자열 처리 함수 |
5) 사용자 정의 헤더 파일
- 사용자가 직접 .h 파일을 만들어 정의할 수 있다.
- #define 매크로, 함수 원형 선언, 상수 선언 등을 포함한다.
- #pragma once는 해당 헤더 파일이 컴파일 과정에서 한 번만 포함되도록 보장한다.
- 동일 헤더가 중복 포함되어 생기는 오류를 방지한다.
✅ 예시:
// mymath.h
#pragma once
#define PI 3.141592
int square(int x);
- 사용자 정의 헤더가 다른 폴더에 있다면 #include "경로/파일명.h" 형태로 경로를 명시한다.
💻 예제 코드: 사용자 정의 헤더 활용 예제
📁 파일 구조
project/
├── main.c
├── mymath.h
└── mymath.c
🔹 mymath.h
// mymath.h
#pragma once // 중복 포함 방지
#define PI 3.141592 // 매크로 상수 정의
int square(int x); // 함수 원형 선언
🔹 mymath.c
// mymath.c
#include "mymath.h" // 사용자 정의 헤더 포함
int square(int x) {
return x * x;
}
🔹 main.c
// main.c
#include <stdio.h> // 표준 입출력 포함
#include "mymath.h" // 사용자 정의 헤더 포함
int main() {
int num = 5;
// 사용자 정의 함수 호출
printf("정수 %d의 제곱은 %d입니다.\n", num, square(num));
printf("원주율 PI는 %.6f입니다.\n", PI);
return 0;
}
🔸 실행 결과
정수 5의 제곱은 25입니다.
원주율 PI는 3.141592입니다.
✅ 마무리 정리
1️⃣ 선행처리기는 컴파일 전 단계에서 텍스트 단위의 처리를 수행한다.
2️⃣ #include, #define 등은 대표적인 전처리 명령어이다.
3️⃣ #으로 시작하고, ; 없이 작성하며, C 문법과 독립적으로 동작한다.
4️⃣ <파일명>은 표준 헤더 포함, "파일명"은 사용자 정의 헤더 포함에 사용한다.
5️⃣ 사용자 정의 헤더는 #pragma once로 중복 포함을 방지한다.
6️⃣ 헤더 파일에는 매크로, 함수 원형, 상수 등을 선언할 수 있다.
'Language > C' 카테고리의 다른 글
| 📌 Chapter 17 - 선행처리기와 다중 소스 파일 - 조건부 컴파일 (0) | 2025.06.24 |
|---|---|
| 📌 Chapter 17 - 선행처리기와 다중 소스 파일 - 매크로 (0) | 2025.06.24 |
| 📌 Chapter 16 - 동적 메모리와 연결 리스트 - 연결 리스트 (0) | 2025.06.23 |
| 📌 Chapter 16 - 동적 메모리와 연결 리스트 - 동적 할당 (1) | 2025.06.23 |
| 📌 Chapter 15 - 스트림과 파일 입출력 (0) | 2025.06.21 |