반응형
안녕하세요!
이번 시간에는 C 언어에서 정말 많이 사용되지만, 헷갈릴 수 있는 요소인 **전처리기 지시문(preprocessor directives)**에 대해 알아보겠습니다.
C 언어를 좀 써보신 분들이라면 #include, #define, #ifdef 같은 걸 보신 적 있을 거예요.
하지만 정확히 언제 쓰고, 어떻게 쓰는지가 헷갈릴 수 있죠. 오늘은 이 전처리기의 핵심들을 확실히 정리해봅시다.
1. 전처리기란 무엇인가요?
전처리기는 C 컴파일러가 코드를 컴파일하기 전에 미리 처리하는 단계입니다.
즉, 전처리기 지시문은 컴파일러에게 “이 코드를 이렇게 바꿔서 넘겨줘~” 라고 말하는 명령어입니다.
전처리기 지시문의 종류
지시문 설명
#include | 다른 파일 불러오기 |
#define | 매크로 정의 (상수/함수처럼 사용 가능) |
#undef | 정의 취소 |
#ifdef, #ifndef, #endif | 조건부 컴파일 |
#if, #else, #elif | 조건 판단 |
2. #include – 외부 파일을 가져오자
우리가 항상 쓰는 #include <stdio.h> 같은 문장 있죠?
이건 말 그대로 다른 파일에 있는 코드(함수, 구조체 등)를 가져오는 기능이에요.
- <...>는 시스템 헤더파일
- "..."는 사용자 정의 헤더파일
예를 들어 다음처럼 쓸 수 있습니다:
#include "myutils.h"
3. #define – 상수와 매크로를 만들자
#define PI 3.14
#define SQUARE(x) ((x)*(x))
- PI는 간단한 상수 정의
- SQUARE(x)는 함수처럼 보이지만 사실은 단순한 문자열 치환이에요.
❗ 괄호 사용에 주의! 안 쓰면 의도치 않은 결과가 나올 수 있어요.
4. 조건부 컴파일 – 상황 따라 다르게 컴파일하기
#define DEBUG
#ifdef DEBUG
printf("디버깅 정보 출력\n");
#endif
이 구조는 개발 중일 때만 디버깅 코드를 실행하고, 나중에 릴리즈할 때는 빼버리는 데 유용해요.
5. 실습 예제 – 헤더 파일 나눠보기
이번엔 간단한 예제를 가지고, 코드를 헤더 파일과 소스 파일로 분리해보는 실습을 해볼게요.
📁 main.c
#include <stdio.h>
#include "mathutil.h"
int main() {
int num = 5;
printf("제곱 결과: %d\n", square(num));
}
📁 mathutil.h
#ifndef MATHUTIL_H
#define MATHUTIL_H
int square(int x);
#endif
📁 mathutil.c
#include "mathutil.h"
int square(int x) {
return x * x;
}
💡 헤더파일에 #ifndef ~ #define ~ #endif를 써주는 건 중복 포함 방지용이에요!
6. 오늘의 과제 🎯
과제 주제
📂 여러 파일로 구성된 프로젝트에서 헤더 파일을 나눠 관리해보세요!
과제 내용
- 두 개 이상의 기능을 헤더파일로 분리
- #define과 #ifdef를 활용하여 조건부 실행 코드 작성
- main.c는 정리된 형태로 구성
마무리 정리
- 전처리기는 컴파일 전에 미리 처리되는 부분
- #define, #include, 조건부 컴파일은 실무에서 정말 자주 씀
- 앞으로의 모듈화와 디버깅에도 꼭 필요하니 확실히 익혀둡시다!
반응형
'C언어 > C언어 고급' 카테고리의 다른 글
고급1강_비트 연산자와 열거형(enum) 완전 정복! (0) | 2025.04.23 |
---|---|
고급8강_프로젝트 발표 & 코드 리뷰 (0) | 2025.04.22 |
고급7강_실전 프로젝트 제작 (0) | 2025.04.22 |
고급6강_프로젝트 설계 및 역할 분담 (0) | 2025.04.22 |
고급5강_디버깅 기법 완전 정복 (0) | 2025.04.22 |