전처리기(#)는 컴파일 전 소스 코드를 가공하는 역할을 한다.
매크로를 잘 사용하면 코드의 가독성과 유지보수성을 높일 수 있지만, 남용하면 디버깅이 어려워질 수 있다.
전처리기 및 매크로 예시
#include <stdio.h>
// 1. 상수 매크로
#define PI 3.14159
#define MAX_SIZE 100
// 2. 함수형 매크로 (괄호 사용 주의!)
#define SQUARE(x) ((x) * (x))
// 3. 조건부 컴파일
#define DEBUG_MODE
int main() {
printf("PI: %.2f\n", PI);
printf("Square of 5: %d\n", SQUARE(5));
#ifdef DEBUG_MODE
printf("Debug: Program is running in debug mode.\n");
#endif
return 0;
}
코드 설명:
– #define은 단순 치환이므로 함수형 매크로 작성 시 인자와 전체 식에 반드시 괄호를 씌워야 연산자 우선순위 문제를 방지할 수 있다.
– #ifdef와 같은 조건부 컴파일을 활용하면 특정 환경(디버그, OS 등)에 따라 코드를 선택적으로 포함할 수 있다.
처음에는 가볍게 훑으려던 C언어 전처리기와 매크로가 생각보다 깊었다.
시작은 가벼웠는데 생각보다 고민이 길어졌다.
포인터를 한 줄씩 따라가면서 하나씩 확인하다 보니 문장으로 읽을 때는 알겠는데, 막상 코드에서 만나면 어디부터 봐야 할지 멈칫했다.
같은 내용을 다른 변수 이름으로 다시 구현했더니 C언어 전처리기와 매크로이 훨씬 또렷해졌다.
C언어 전처리기와 매크로을 한 번에 끝내진 못했지만, 적어도 흔들리는 지점은 분명해졌다.
예전보다 덜 겁난다는 감각이 생긴 게 가장 큰 수확이었는 것 같다.