C++의 빌드 단계

  1. 전처리(Preprocess)
    1. 메타 정보를 인식하여, 코드를 삽입/제거 하거나, 치환하는 단계.
      1. 표준은 아니지만, Clang, GCC, MSVC에서는 #pragama once 키워드를 지원한다.
        1. 소스 코드 파일을 컴파일할 때 컴파일러에 헤더 파일이 한 번만 포함되도록 지정하는 키워드.
    2. #include 키워드의 경우 해당하는 파일의 코드를 모두 가져와서 붙여 넣는 효과가 있다.
    3. 파일마다 헤더들을 Include하기 때문에 중복된 파일들이 각각의 파일에 포함될 수 있는데, 이를 최적화 하기 위해서 unity 빌드 라는 개념이 생겼다.
    4. #include를 Header에서 남발할 경우, 서로 참조 문제가 발생할 수 있다.
      1. 이 때문에 최대한 Header에서는 include를 하지 말고, 전방 선언을 이용 해야 한다.
  2. 컴파일(Compile)
    1. 소스 코드를 기계어로 번역.
  3. 링크(Link)
    1. 기계어로 된 여러 오브젝트 파일을 묶어서 하나의 실행 파일로 만든다.

C++ 14부터는 숫자 리터럴에 자릿수 구분자를 쓸 수 있다.

int number1 = 23'456'789;
float number2 = 0.123'456f;

열거형

Decltype(auto)

const string& foo();

// auto의 경우 const를 제거하는 기능이 있다.
auto f1 = foo(); // string f1; 이 되어버린다. (const가 없어져서 참조형도 없어짐)

// 그래서 c++은 decltype(auto)를 제공한다.
// decltype의 경우 const를 제거하는 기능이 없기 때문에.
decltype(auto) f1 = foo(); // const string& f1;

Uniform initializer