translation_phases — 번역 단계
translation_phases — 번역 단계 (Phases of translation)
C++ 소스 파일은 컴파일러에 의해 처리되어 C++ 프로그램이 돼요. 이 처리는 여러 **번역 단계(phase)**로 나뉘어요.
C++ 프로그램의 텍스트는 **소스 파일(source file)**이라는 단위로 보관돼요. C++ 소스 파일은 **번역(translation)**을 거쳐 **번역 단위(translation unit)**가 돼요.
출처: cppreference
본문
번역 과정 (Translation process)
번역은 다음 단계들로 구성돼요.
- 각 소스 파일을 문자 시퀀스로 매핑한다.
- 각 문자 시퀀스를 공백으로 구분된 전처리 토큰(preprocessing token) 시퀀스로 변환한다.
- 각 전처리 토큰을 토큰으로 변환해 토큰 시퀀스를 만든다.
- 각 토큰 시퀀스를 번역 단위로 변환한다.
번역된 번역 단위들로 C++ 프로그램이 만들어질 수 있어요. 번역 단위는 서로 다른 소스 파일에서 왔을 수 있고, 함께 연결(link)되어 프로그램을 이뤄요.
8단계 (C++17 기준 요약)
표준은 실제로 8개의 세부 단계를 정의해요.
- 물리적 소스 문자를 기본 소스 문자 집합에 매핑 (개행 정규화)
- 각 백슬래시+개행(
\\n) 연속을 삭제 (줄 결합, splicing) - 소스를 주석과 공백, 전처리 토큰으로 분해 (주석은 공백 하나로 대체)
- 전처리기 실행 —
#include, 매크로 확장, 조건부 컴파일 등 - 문자 리터럴과 문자열 리터럴의 이스케이프 시퀀스를 실행
- 인접한 문자열 리터럴을 결합
- 토큰을 문법에 따라 구문 분석 (컴파일)
- 외부 개체와 함수를 검사하고 연결(link) 준비
// 4단계 예: 전처리기
#include <iostream> // include 지시문
#define SQUARE(x) ((x)*(x))
int main() {
std::cout << SQUARE(5); // 매크로 확장 → ((5)*(5))
}
번역 단계를 이해하면 전처리기 동작, 매크로의 문자열화/토큰 접합, 줄 결합 같은 예상 밖의 동작을 이해하는 데 큰 도움이 돼요.