YUYANE

C / 컴파일 과정에 대해서 본문

Programming Languages/C

C / 컴파일 과정에 대해서

YUYA 2021. 1. 25. 10:19

학습 강의

www.boostcourse.org/cs112/lecture/119011

 

 

컴파일링

 

인간이 사용하는 소스 코드를 기계가 이해할 수 있게 오브젝트 코드(머신 코드)로 변환하는 전체과정.

 

C언어에서 make나 clang을 사용해서 프로그램을 실행할 때, 아래 네 가지 단계를 거쳐야 최종적으로 실행 가능한 파일이 완성 된다.

 

- 전처리(Preprocessing), 컴파일(Compiling), 어셈블(Assemble), 링크(Link)

 

 

전처리(Preprocessing)

 

#으로 시작되는 C 소스 코드(여기서는 'include')는 전처리기에게 코드 실행에 앞서 무언가를 실행하라고 알려준다.

예를 들어, 코드 작성에 앞서 '#include'를 통해 C언어로 작성 된 'stdio.h' 라이브러리를 포함시키라고 프로그램에게 알려주는 것이다. 

 

그러면 전처리기는 C 소스 코드로 된 새로운 파일을 생성하고, # 부분은 해당 파일의 실제 C 소스 코드로 대체된다.

앞선 예시로 살펴 보면, 'stdio.h' 파일의 내용이 #include 부분으로 대체된다.

 

 

컴파일(Compiling)

 

우선 컴파일(일반적인 의미)을 실행 하면, 전처리 단계를 거치며 전처리 된 소스 코드가 생성된다.

 

이후에는 컴파일러라고 불리는 프로그램이 C코드를 어셈블리어라는 저수준 프로그래밍 언어로 컴파일한다.

다시 말해, C코드를 컴퓨터가 이해할 수 있는 언어와 최대한 가까운 프로그램으로 만들어 주는 과정이다.

 

이처럼, 컴파일은 구체적으로 전처리한 소스 코드를 어셈블리 코드로 변환시키는 단계를 구체적으로 일컫기도 한다.

 

 

어셈블(Assemble)

 

컴파일 결과 어셈블리 코드가 생성되면, 어셈블러라는 프로그램이 어셈블리 코드를 0과 1로 이루어진 오브젝트 코드(머신 코드)로 변환시킨다. 컴퓨터의 CPU(중앙처리장치)가 프로그램을 어떻게 수행해야 하는 지 알 수 있는 명령어 형태인 이진법 형태로 바꿔주는 작업이다.

 

만약에 소스 코드에서 오브젝트 코드로 컴파일 되어야 할 파일이 한 개 라면, 컴파일 작업은 여기서 끝나지만,

컴파일 되어야 할 파일이 여러 개 라면 링크라고 불리는 단계가 추가된다. 예를 들어, 아래 이미지는 inventory.c, stdio.h, cs50.h 라는 세 가지 파일로 이루어져 있다.

 

inventory.c

 

 

 

링크(Link)

 

링커를 통해 여러 개의 오브젝트 파일을 하나의 큰 오브젝트 파일로 합치는 단계이다. 위의 이미지에서 inventory.c, stdio.h, cs50h 세 개의 파일을 하나의 파일로 합치는 것이다. 

Comments