- ~(156p) 1.2 어느 정도 규모 있는 첫 C++ 프로그램 바로 앞까지
- AM 10:30에 회의실에서 리뷰
C++의 빌드 단계
- 전처리(Preprocess)
- 메타 정보를 인식하여, 코드를 삽입/제거 하거나, 치환하는 단계.
- 표준은 아니지만, Clang, GCC, MSVC에서는 #pragama once 키워드를 지원한다.
- 소스 코드 파일을 컴파일할 때 컴파일러에 헤더 파일이 한 번만 포함되도록 지정하는 키워드.
- #include 키워드의 경우 해당하는 파일의 코드를 모두 가져와서 붙여 넣는 효과가 있다.
- 파일마다 헤더들을 Include하기 때문에 중복된 파일들이 각각의 파일에 포함될 수 있는데, 이를 최적화 하기 위해서 unity 빌드 라는 개념이 생겼다.
- #include를 Header에서 남발할 경우, 서로 참조 문제가 발생할 수 있다.
- 이 때문에 최대한 Header에서는 include를 하지 말고, 전방 선언을 이용 해야 한다.
- 컴파일(Compile)
- 소스 코드를 기계어로 번역.
- 링크(Link)
- 기계어로 된 여러 오브젝트 파일을 묶어서 하나의 실행 파일로 만든다.
C++ 14부터는 숫자 리터럴에 자릿수 구분자를 쓸 수 있다.
int number1 = 23'456'789;
float number2 = 0.123'456f;
열거형
- 첫 번째 항목의 경우 아무런 값을 지정하지 않으면 컴파일러가 0으로 지정.
- 열거 타입 항목의 값은 직전 항목의 값에 1을 더한 값.
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;
- Visual Studio에서 제공할 듯.
- 찾아보자.
Uniform initializer
- 기본 타입은 0으로 초기화.
- 포인터는 nullptr로 초기화.
- 객치는 디폴트 생성자로 초기화.