우리가 작성한 소스코드는 컴파일러가 2진수로 된 머신 코드로 변환해준다.
#include <stdio.h>
컴퓨터는 RAM(Random Access Memory)라는 물리적 저장장치를 포함하고 있다. 우리가 작성한 프로그램은 RAM에 저장되고, 유한한 크기의 비트만 저장 가능하다. 나눗셈을 하거나 곱셈을 할 때, 저장 가능한 비트의 수가 유한하기 때문에 부정확한 결과를 내거나 에러가 뜰 수도 있다.
나눗셈의 경우, 2의 -n승으로 나누기를 하는데, 2로 나누어떨어지지 않는 나눗셈의 경우 실제 계산결과와는 다른 결과를 낼 수 있고, 곱셈의 경우 변수에 곱한 수를 저장한다면, 해당 타입이 저장할 수 있는 수를 넘은 이후에는 0이 출력된다.
프로그램을 실행할 때 네 단계를 거친다.
- 전처리
- 컴파일링
- 어셈블링
- 링킹
전처리
전처리기에 의해 수행. #으로 시작되는 코드는 전처리기에게 컴파일링이 이루어지기 전 실행할 일을 알려준다.
여전히 c코드의 형태
컴파일
컴파일러가 c코드를 어셈블리어라는 저수준 프로그래밍 언어로 컴파일한다. 그로 인해 컴퓨터가 이해할 수 있는 언어와 가까운 프로그램으로 만들어준다.
어셈블링
어셈블리 코드를 오브젝트 코드로 변환시켜준다. 컴퓨터의 중앙처리장치가
프로그램을 수행할 수 있게 0과 1로 바꿔주는 작업이다. 어셈블러라는 프로그램이 수행한다.
링크
프로그램이 여러개의 파일로 이루어져 있어 하나의 오브젝트 파일로 합쳐져야 할 때 필요한 단계이다.
컴파일 하는 동안 라이브러리를 링크해서 함수를 실행할 수 있게 한다.
참고 사이트 : https://www.boostcourse.org/cs112/lecture/119011?isDesc=false