컴파일이란 무엇일까?

c
avatar
2025.04.02
·
4 min read

C언어 수업에서 gcc명령어로 컴파일 한다길레 컴파일에 대해 대충은 알고 있었지만 자세하게 궁금해졌다. 먼저 gpt에게 물어보았다.

4506

요약하자면 C언어의 코드를 다른 언어로 바꿔주는 과정이다.

컴파일은 4가지 과정이 있다고 한다.

  • 전처리(Preprocessing)

    • #include, #define 같은 전처리 지시문을 처리하는 단계.

    • 매크로 치환, 파일 포함, 조건부 컴파일 등이 수행됨.

    • gcc -E hello.c -o hello.i → 전처리된 코드 출력.

  • 컴파일(Compile)

    • 전처리된 코드를 어셈블리 코드로 변환.

    • 문법 오류가 있는지 검사.

    • gcc -S hello.i -o hello.s → 어셈블리 코드 출력.

  • 어셈블(Assemble)

    • 어셈블리 코드를 기계어(오브젝트 파일)로 변환.

    • .s 파일을 .o 또는 .obj로 변환.

    • gcc -c hello.s -o hello.o → 오브젝트 파일 생성.

  • 링크(Linking)

    • 여러 개의 오브젝트 파일과 라이브러리를 합쳐 실행 가능한 프로그램(.exe 또는 a.out)을 생성.

    • gcc hello.o -o hello → 실행 파일 생성.


전처리 단계에서 #include와 같은 전처리 지시문을 처리하고,

컴파일 단계에서 문법 오류를 검사하고,

어셈블 단계에서 기계어로 변환시키고,

링크 단계에서 실행파일을 생성시킨다는 것을 알수 있었다.

#include <stdio.h>

그럼 #include는 무엇이고, 그 옆에 항상 같이 치는 stdio.h는 무엇일까?

  1. #include

  • 전처리 지시문

  • 컴파일 전에 미리 특정 파일의 내용을 현재 코드에 포함하는 역할

  1. stdio.h

  • 입출력과 관련된 기능을 제공하는 라이브러리

stdio.h 라이브러리의 대표적인 함수들이다.

함수명

함수설명

printf()

화면에 출력

scanf()

사용자 입력 받기

puts()

문자열 출력

gets()

문자열 입력 (보안 문제로 사용 지양)

fopen()

파일 열기

fclose()

파일 닫기

fread()

파일에서 데이터 읽기

fwrite()

파일에 데이터 쓰기

컴파일에 대해서 간단하게 알아보았는데,
C언어를 컴퓨터 언어로 바꾸는것이 컴파일이고,
C언어의 컴파일하는 과정중 전처리 단계에서
#include를 통해 stdio.h의 라이브러리를 코드에 포함시켜
우리가 잘 아는 scanf()나 printf()같은 함수들을 사용하게 만들어주는 역할을 한다는 것을 알았다.







- 컬렉션 아티클