C, C++ Category/C, C++

C언어 컴파일 과정

ReBugs 2023. 7. 17.

test.c

#include <stdio.h>
int main(){
	printf("Hello, World!");
}

 

test.cpp

#include <iostream>
using namespace std;
int main() {
    cout << "Hello, World!";
}

 

우리가 작성한 C언어로 작성된 코드(test.c 또는 test.cpp) 즉, 소스코드가 실행 파일(exe)이 되기까지 아래의 과정을 거치게 된다.

  1. 전처리
  2. 컴파일
  3. 어셈블
  4. 링크

 

전처리 과정(preprocessing)

  • 본격적으로 컴파일하기 전에 처리할 작업들
  • 외부에 선언된 다양한 소스 코드, 라이브러리 포함, 예를 들어 #include
  • 프로그래밍의 편의를 위해 작성된 매크로 변환, 예를 들어 #define
  • 컴파일할 영역 명시, 예를 들어 #if, #ifdef

 

컴파일 과정(compiling)

  • 전처리가 완료 되어도 여전히 소스 코드
  • 전처리가 완료된 소스 코드를 저급 언어(어셈블리어)로 변환

 

어셈블 과정

  • 어셈블리어를 기계어로 변환
  • 목적 코드(object file)를 포함하는 목적 파일이 됨

 

링크 과정

  • 각기 다른 목적 파일을 하나의 실행 파일로 묶어주는 과정
  • 링킹은 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업
  • 이 파일이 메모리에 로딩되어 실행된다.
  • 링크는 컴파일 시에 수행되는 경우도 있고, 로딩 시에 수행되는 경우도 있고, 실행 시에 수행되는 경우도 있다.

목적 파일 VS 실행 파일
목적 코드로 이루어진 파일을 목적 파일이라고 부른다. 마찬가지로 실행 코드로 이루어진 파일을 실행 파일이라고 부른다.
윈도우의 .exe 확장자를 가진 파일이 대표적인 실행 파일이다.
목적 파일과 실행 파일은 같은 의미가 아니다.
목적 코드가 실행 파일이 되기 위해서는 링킹이라는 작업을 거쳐야 한다.
즉, 고급 언어가 컴파일을 거쳐 목적 코드가 되고, 목적 코드가 링킹을 거쳐 실행 파일이 되는 것이다.

 

 

댓글