[CS] 컴파일러
컴파일러는 사용자가 작성한 특정한 프로그래밍 언어 문서를 다른 프로그래밍 언어로 번역하는 번역 프로그램을 말한다.
예를 들어 작성자가 C++ 코드를 작성했다고 한다면, C++은 사용자가 이해할 수 있는 프로그래밍 언어이다. 해당 코드를 실행하기 위해선 컴퓨터는 이를 자신이 사용하는 언어로 번역할 필요가 있다.(이를 컴파일이라고 한다.) 이들이 사용하는 언어체계는 우리와 다르니 말이다.
통상적으로 C++같은 프로그래밍 언어를 고급 언어, 컴퓨터가 사용하는 언어를 저급 언어라고도 하며, 컴퓨터같은 기계 장치가 이해하는 언어라고도 해서 기계어라고도 한다.
컴파일러는 고급언어를 기계어로 해석하는 작업을 하는 컴파일을 한다. 컴파일하는 과정에서 컴파일러는 고급언어로 만들어진 코드 전체를 번역하여 기계어로 번역된 코드로 만든다.
이전에 작성한 원래의 코드를 '원시 코드', 기계어로 번역할 때 만들어진 코드를 '목적 코드'라고 한다. 이 목적 코드를 다시 하나의 실행파일로 만드는 작업인 '링킹(Linking)'이라는 작업을 한다.
소스 코드가 실행파일이 되는 과정
- code 파일을 컴파일을 통하여 전처리기와 컴파일러를 거쳐서 오브젝트 파일을 만든다.
- 오브젝트 파일이 빌드 과정을 거치면서 링커의 라이브러리가 링크되면 실행파일이 만들어진다.
전처리기
- 컴파일 전에 사전에 처리할 것을 처리해주는 것
- 주석 처리된 부분을 프로그램 실행과 상관하지 않도록 컴파일 대상에서 제외한다.
- include를 통해 지정된 파일을 가져온다.
- 소스 코드에 문법적 오류가 발생한 경우 전처리기와 컴파일러가 오류를 판별 후 컴파일을 중단한다.
Build
- 오브젝트 파일과 실행파일로 만들기 위해 필요한 각종 라이브러리들을 합치는 작업
- 이 작업을 통해 exe 파일을 만드는 과정을 말한다.
Link
- 오브젝트 파일과 각종 라이브러리들을 연결하는 작업