C언어 프로그램의 실행 과정은 다음과 같다.
-
컴파일러 (Compiler)
-
전처리 (Preprocess)
-
컴파일러가 쉽게 인식할 수 있도록 소스 코드 내부에 "#"으로 시작되는 명령어 재정리
(#define MAX 100이라고 선언했을 경우, 소스에서 MAX라고 쓰여있는 부분을 100으로 치환)
-
hello.c 파일을 입력으로 hello.i 파일 생성
-
-
컴파일 (Compile)
-
전처리된 소스 코드를 어셈블리어로 변환
-
hello.i 파일을 입력으로 hello.s 파일 생성
-
-
어셈블 (Assemble)
-
어셈블리어를 기계어(binary)로 변환
-
hello.s 파일을 입력으로 hello.o 파일 생성
-
-
-
링커 (Linker)
-
목적 파일을 관련된 라이브러리와 연결하여 실행 파일 생성
-
hello.o 파일을 입력으로 hello.exe 파일 생성
-
※ 컴파일과 어셈블이 필요한 이유
프로그래머가 고급 언어(C, JAVA 등)를 이용하여 작성한 코드는 CPU가 실행 할 수 없다.
CPU는 0,1과 같이 이진 코드로 작성된 파일만 실행 할 수 있기 때문이다.
하지만 프로그래머가 직접 이진 코드를 작성하는 것은 매우 까다로운 일이다.
여기서 어셈블리 코드를 사용하는 이유를 알 수 있다.
프로그래머는 이진 코드와 매핑된 명령어 이름(어셈블리)을 이용하여 로직을 작성 할 수 있다.
그러나 어셈블리 코드 작성 또한 까다롭다.
고급 언어로 코드를 작성한 후 컴파일(Compile), 어셈블(Assemble) 과정을 거친다면
좀 더 편하게 프로그램을 만들어 낼 수 있다.
※ 링킹이 필요한 이유
어셈블(Assemble) 과정을 마친 후 얻은 목적 파일은 직접 실행할 수 없는 파일이다.
표준 라이브러리 및 사용자 라이브러리를 포함하고 있지 않기 때문이다.
링킹을 통해 필요한 라이브러리를 목적 파일과 연결하는 과정이 끝나면 실행 가능한 exe파일이 생성된다.
( printf(), scanf()와 같은 표준 라이브러리는 별도로 링크하지 않아도 미리 컴파일 되어있기 때문에 자동으로 링크 )
※ Compile + Linking = Build
Visual Studio에서 디버깅 하지 않고 시작(Ctrl + F5)을 하게 되면
빌드 과정(F7)을 거쳐 실행 파일을 생성한 후 실행하게 된다.
여기서 빌드 과정이란 컴파일(Ctrl + F7)과 링킹 과정을 합한 것을 말한다.
'Language > C, C++, C#' 카테고리의 다른 글
[C] clock()을 이용한 타자연습기 만들기 (실행시간 측정) (0) | 2020.08.17 |
---|---|
[C] Sleep(), system("cls")를 이용한 주사위 굴리기 (0) | 2020.08.16 |
[C] 배열과 포인터의 관계 (0) | 2020.06.21 |
[C] 방향키로 printf() 커서 위치 이동 (gotoxy) (0) | 2020.06.09 |
[C] 아스키코드(ASCII)와 유니코드(Unicode)란? (0) | 2020.06.09 |