- 기본적으로 우리가 적은 소스 코드들은 0과 1로 이루어진 오브젝트 코드로 바뀌어야하는데, 이러한 번역과정을 컴파일 과정이라고 한다.
- 소스코드 --> 컴파일 과정 --> 오브젝트 코드 로 바뀌게 되는 것,
1) 전처리
- 컴파일과정이 시작되기 이전에, C언어에서 #include와 같이 전처리기에게 다른 파일의 내용을 포함하라고 알려준다. 그러면 새로운 파일을 생성할 때, 언어는 C언어이지만 studio.h 파일의 내용이 #include부분에 포함이 된다.
2) 컴파일
- 전처리기가 전처리한 소스코드를 생성하고 나면, 컴파일 과정을 시작한다. 프로그램은 C코드에서 어셈블리언어 라는 저수준 프로그래밍 언어로 컴파일한다. 즉, 바로 오브젝트 언어로 바꾸지 않고, 컴퓨터가 이해할 수 있는 언어와 최대한 가까운 어셈블리 언어로 바꿔주는 것이다. 컴파일이라는 용어는 소스 코드에서 오브젝트 코드로 변환하는 전체 과정을 통틀어 일컫기도 하지만, 구체적으로 전처리한 소스 코드를 어셈블리 코드로 변환시키는 단계를 말하기도 한다.
3) 어셈블
- 소스코드가 어셈블리 언어로 바뀌면, 어셈블리 언어에서 오브젝트 코드로 바꿔주는 것을 이야기한다. 이 과정은 어셈블러라는 프로그램이 수행한다. 소스코드에서 오브젝트 코드로 바뀌어야하는 파일이 딱 한개라면, 컴파일 작업은 여기서 끝이 난다. 그게 아니라면 링크라는 단계가 추가된다.
4) 링크
- 만약 프로그램이 (math.h나 cs50.h와 같은 라이브러리를 포함해) 여러 개의 파일로 이루어져 있어 하나의 오브젝트 파일로 합쳐져야 한다면 링크라는 컴파일의 마지막 단계가 필요하다. 링커는 여러 개의 다른 오브젝트 코드 파일을 실행 가능한 하나의 오브젝트 코드 파일로 합쳐준다. 예를 들어, 컴파일을 하는 동안에 CS50 라이브러리를 링크하면 오브젝트 코드는 GetInt()나 GetString() 같은 함수를 어떻게 실행할 지 알 수 있게 된다.