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

요약하자면 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는 무엇일까?
#include
전처리 지시문
컴파일 전에 미리 특정 파일의 내용을 현재 코드에 포함하는 역할
stdio.h
입출력과 관련된 기능을 제공하는 라이브러리
stdio.h 라이브러리의 대표적인 함수들이다.
함수명 | 함수설명 |
| 화면에 출력 |
| 사용자 입력 받기 |
| 문자열 출력 |
| 문자열 입력 (보안 문제로 사용 지양) |
| 파일 열기 |
| 파일 닫기 |
| 파일에서 데이터 읽기 |
| 파일에 데이터 쓰기 |
컴파일에 대해서 간단하게 알아보았는데,
C언어를 컴퓨터 언어로 바꾸는것이 컴파일이고,
C언어의 컴파일하는 과정중 전처리 단계에서
#include를 통해 stdio.h의 라이브러리를 코드에 포함시켜
우리가 잘 아는 scanf()나 printf()같은 함수들을 사용하게 만들어주는 역할을 한다는 것을 알았다.