translation_phases — 번역 단계

translation_phases — 번역 단계 (Phases of translation)

C++ 소스 파일은 컴파일러에 의해 처리되어 C++ 프로그램이 돼요. 이 처리는 여러 **번역 단계(phase)**로 나뉘어요.

C++ 프로그램의 텍스트는 **소스 파일(source file)**이라는 단위로 보관돼요. C++ 소스 파일은 **번역(translation)**을 거쳐 **번역 단위(translation unit)**가 돼요.

출처: cppreference

본문

번역 과정 (Translation process)

번역은 다음 단계들로 구성돼요.

  1. 각 소스 파일을 문자 시퀀스로 매핑한다.
  2. 각 문자 시퀀스를 공백으로 구분된 전처리 토큰(preprocessing token) 시퀀스로 변환한다.
  3. 각 전처리 토큰을 토큰으로 변환해 토큰 시퀀스를 만든다.
  4. 각 토큰 시퀀스를 번역 단위로 변환한다.

번역된 번역 단위들로 C++ 프로그램이 만들어질 수 있어요. 번역 단위는 서로 다른 소스 파일에서 왔을 수 있고, 함께 연결(link)되어 프로그램을 이뤄요.

8단계 (C++17 기준 요약)

표준은 실제로 8개의 세부 단계를 정의해요.

  1. 물리적 소스 문자를 기본 소스 문자 집합에 매핑 (개행 정규화)
  2. 각 백슬래시+개행(\ \n) 연속을 삭제 (줄 결합, splicing)
  3. 소스를 주석과 공백, 전처리 토큰으로 분해 (주석은 공백 하나로 대체)
  4. 전처리기 실행 — #include, 매크로 확장, 조건부 컴파일 등
  5. 문자 리터럴과 문자열 리터럴의 이스케이프 시퀀스를 실행
  6. 인접한 문자열 리터럴을 결합
  7. 토큰을 문법에 따라 구문 분석 (컴파일)
  8. 외부 개체와 함수를 검사하고 연결(link) 준비
// 4단계 예: 전처리기
#include <iostream>   // include 지시문
#define SQUARE(x) ((x)*(x))
int main() {
    std::cout << SQUARE(5);  // 매크로 확장 → ((5)*(5))
}

번역 단계를 이해하면 전처리기 동작, 매크로의 문자열화/토큰 접합, 줄 결합 같은 예상 밖의 동작을 이해하는 데 큰 도움이 돼요.

더 알아보기 (Learn more)

cppreference