C++는 컴파일 언어입니다
작성한 프로그램을 실행하려면 소스 코드가 두 단계의 처리 과정을 거쳐야 합니다. 코드는 단순 문자 텍스트이므로 컴퓨터가 이해할 수 없으며, 컴파일러가 텍스트 기호를 CPU가 인식하는 명령어인 기계어로 변환합니다. CPU는 오직 이 기계어 명령어를 한 줄씩 실행할 수 있습니다.
- 컴파일:컴파일러가 소스 파일을 읽고 오브젝트 파일을 생성;
- 링크:링커가 여러 오브젝트 파일을 통합하여 실행 가능한 프로그램을 생성합니다.
C++ 프로젝트는 일반적으로 여러 소스 파일로 구성되며 처리 흐름 개요도는 다음과 같습니다:

생성된 실행 파일은 특정 하드웨어와 운영체제에 종속되므로 별도 변환 없이 크로스 플랫폼에서 실행할 수 없습니다 (Mac 프로그램은 윈도우 PC에서 직접 실행 불가)
흔히 말하는 C++의 이식성은 소스 코드의 이식성을 의미합니다. 동일한 소스 코드를 여러 시스템에서 각각 컴파일하면 정상 작동합니다.
즉 윈도우에서 컴파일한 exe 파일을 Mac에 복사해도 실행되지 않고, .cpp, .h 같은 소스 텍스트 자체를 Mac으로 옮긴 뒤 Mac용 C++ 컴파일러로 다시 빌드해야 Mac에서 구동 가능한 프로그램이 만들어집니다.
C++ ISO 표준
ISO C++ 표준은 두 가지 핵심 구성 요소로 정의됩니다
- 핵심 언어 기능:언어 자체에 내장된 기본 기능으로,
char/int기본 타입,for/while반복문 등이 포함됩니다. - 표준 라이브러리 컴포넌트:공식 제공 툴 모음으로
vector/map컨테이너,<<출력,getline()입력 읽기 등 IO 연산을 지원합니다.
표준 라이브러리는 전체가 순수 C++ 코드로 구현되어 모든 주요 컴파일러에 기본 탑재되며, 스레드 문맥 전환 같은 극소수의 저수준 작업만 약간의 기계어를 사용합니다.
표준 라이브러리가 필요한 이유는 무엇일까요? 표준 라이브러리는 요즘 자주 언급하는 SDK와 유사한 개념으로 개발자의 업무량을 줄이는 역할입니다. 모든 기본 기능을 개발자가 직접 구현해야 한다면 해당 언어를 사용하는 사람이 거의 없을 것입니다. 예를 들어 콘솔에 텍스트 한 줄 출력하는 로직을 모든 개발자가 개별 작성하면 중복 작업이 막대하게 발생합니다. 이 문제를 해결하기 위해 C++ 설계자들이 미리 완성한 코드를 라이브러리(lib)로 컴파일해 개발자에게 제공했습니다. 간단히 말해 바퀴를 재발명하지 않도록 해 개발 효율을 극대화하고 사용자를 유치하기 위한 구조입니다.
표준 라이브러리는 특수 문법 편법으로 구현되지 않고 순수 C++로 작성되었으므로 소스 코드를 전부 분석하고 유사한 툴을 직접 커스터마이징할 수 있습니다.
C++는 정적 타입 언어
모든 변수, 값, 식별자, 표현식은 코드 사용 지점에서 컴파일러가 타입을 명확히 인지해야 하며, 객체의 타입 자체가 지원 가능한 연산과 동작을 결정합니다.
정적 타입의 핵심 장점:컴파일 단계에서 타입 검사가 진행되므로 많은 오류가 코드 작성 중 컴파일러에 차단되어 프로그램 실행 중 크래시가 발생하지 않으며 안전성과 성능을 모두 확보할 수 있습니다. 구체적으로 컴파일러가 코드를 기계어로 변환할 때 타입 불일치가 감지되면 즉시 오류를 띄웁니다. 예를 들어 나이를 저장하는 정수 변수에 사람 이름 문자열을 저장하면 컴파일 오류가 발생하며 개발자가 바로 수정할 수 있습니다. 반면 실행 시점 오류는 소프트웨어가 배포된 상태라 처리가 훨씬 복잡해집니다.