c++
C++의 컴파일 과정

C++의 컴파일 과정


c++로 작성된 코드를 실제로 실행하기 위한 실행 파일로 변환하기 위해서는 4가지 단계를 거칩니다.

1단계 : 전처리(Preprocessing)

#include#define 와 같은 전처리기 매크로들을 처리하는 전처리 단계

2단계 : 컴파일(Compile)

각각의 소스 파일들을 어셈블리 명령어로 변환하는 컴파일 단계

3단계 : 어셈블(Assemble)

어셈블리 코드들을 실제 기계어로 이루어진 목적 코드(Object file)로 변환하는 어셈블 단계

4단계 : 링킹(Linking)

각각의 목적 코드들을 한데 모아서 하나의 실행 파일로 만들어주는 링킹 단계

전처리(Preprocessing)단계

전처리 단계와 컴파일 단계는 모두 컴파일러 안에서 수행됩니다. C++ 표준에 따르면 이 두 단계는 총 9개의 세부 단계들로 쪼개질 수 있는데, 1 ~ 6 단계까지가 전처리 과정, 7 ~ 9 단계까지가 컴파일 과정입니다. 이제 전처리 단계에서 어떠한 일이 벌어지는지 살펴보겠습니다.

Phase 1: 문자들 해석하기

가장 첫 번째 단계로 소스 파일에 있는 문자들을 해석하는 것입니다. 기본적으로 C++ 코드에서는 총 96개의 문자들로 이루어진 Basic source character set 이 있는데 아래와 같은 구성으로 이루어져있습니다.

  • 5 종류의 공백 문자들 (스페이스, 탭, 개행 문자 등등)
  • 10 종류의 숫자들 (0 부터 9 까지)
  • 52 종류의 알파벳 대소문자
  • 29 종류의 특수 문자들 ( _, {, + 등등 ) 이 기본 문자 셋에 포함되어 있지 않은 다른 모든 문자들은 \u 를 통해 유니코드 값으로 치환되거나, 컴파일러에 의해서 따로 해석됩니다.

Phase 2: \ 문자 해석하기

만약에 백슬래시 (\) 문자가 문장 맨 끝 부분에 위치해있다면, 해당 문장과 바로 다음에 오는 문장이 하나로 합쳐지고 개행 문자는 삭제됩니다. 쉽게 말해

abc def

로 된 코드는

abcdef

로 변경됩니다.

Phase 3: 전처리 토큰들로 분리하기

이 단계에서는 소스 파일을 주석 (comment), 공백 문자, **전처리 토큰(Preprocessing token)**들로 분리하는 단계입니다. 전처리 토큰 은 C++ 에서의 가장 기본적인 문법 요소로, 후에 컴파일러가 사용하는 컴파일러 토큰 의 근간이 됩니다. 아래 해당하는 것들이 전처리 토큰에 포함됩니다.

  • 헤더 이름 ( <iostream> 과 같이)
  • 식별자
  • 문자/문자열 리터럴
  • 연산자들 ( +, ## )