C 전처리기란 무엇인가?
C 프로그래밍 언어는 프로그램을 더욱 효율적으로 작성하고 관리할 수 있도록 전처리기(Preprocessor)를 지원합니다. C 전처리기는 C 기반 프로그래밍 언어를 위한 매크로 전처리기로, 실제 컴파일이 시작되기 전에 소스 코드를 사전에 처리하는 역할을 담당합니다.
전처리기를 활용하면 컴파일러에 다음과 같은 기능을 명시적으로 지시할 수 있습니다.
- 헤더 파일 포함: 외부 파일의 선언을 소스에 가져오기
- 매크로 확장: 상수나 함수 형태의 매크로 치환
- 조건부 컴파일: 특정 조건에 따라 코드 선택적 컴파일
- 라인 제어: 컴파일러의 줄 번호 및 파일 정보 제어
전처리기의 기본 문법
전처리기는 #(해시) 기호로 정의됩니다. 즉, 모든 전처리기 지시문은 반드시 #로 시작하며, 그 뒤에 공백 없이 전처리기 이름이 이어집니다.
#include <stdio.h>
#define PI 3.14159위 예시처럼 전처리기 지시문은 일반 문장과 달리 세미콜론(;)을 붙이지 않는다는 점도 기억해 두면 좋습니다.
주요 C 전처리기 지시문 목록
아래 표는 C에서 자주 사용되는 전처리기 지시문 10가지를 정리한 것입니다.
| 번호 | 전처리기 | 설명 |
|---|---|---|
| 1. | #include | 지정한 헤더 파일을 소스 코드에 포함시킵니다. |
| 2. | #define | 전처리기 매크로(상수 또는 함수형 매크로)를 정의합니다. |
| 3. | #undef | 이미 정의된 전처리기 매크로의 정의를 해제합니다. |
| 4. | #if | 컴파일 시점의 조건을 검사하여 참(True)인 경우 해당 코드를 컴파일합니다. |
| 5. | #else | #if 조건이 거짓일 때 실행되는 대안 블록을 지정합니다. |
| 6. | #ifndef | 매크로가 정의되어 있는지 검사하며, 정의되어 있지 않으면 참(TRUE)으로 평가됩니다. |
| 7. | #elif | #if와 #else를 결합한 것으로, '그렇지 않고 만약'의 조건을 처리합니다. |
| 8. | #error | stderr 스트림으로 출력될 오류 메시지를 정의합니다. |
| 9. | #endif | #if로 시작된 조건부 컴파일 블록을 종료합니다. |
| 10. | #pragma | 컴파일러에 특정 명령이나 옵션을 전달하는 데 사용됩니다. |
마무리
C 전처리기는 단순히 코드를 치환하는 도구를 넘어, 헤더 파일 관리부터 조건부 컴파일까지 프로그램 구조를 유연하게 설계할 수 있게 해주는 핵심 요소입니다. 특히 #ifndef과 #endif를 활용한 헤더 중복 포함 방지(include guard)는 실무에서 반드시 알아야 할 패턴이므로, 각 지시문의 용도를 정확히 익혀두는 것이 좋습니다.