매우 쉬운 C언어 알아보기 2: 소스 파일의 여정
게시글 주소: https://orbi.kr/00036298469
방금전 작성한 소스 파일
방금 전에 아무 뜻도 모르고 작성한 소스 파일이 있었습니다. hello_world.c 파일이었습니다.
C언어 소스 파일이란, 우리가 C언어로 작성하여 컴퓨터에게 이러한 작업을 처리해 달라는 설계도로 생각하시면 됩니다.
하지만, 컴퓨터는 매우 멍청하기 때문에, 0과 1밖에 모릅니다. 이러한 바보멍청이에게 C언어를 가져다 주어 봤자 이해하지 못합니다. 그러기 위해서는, 컴파일러라는 프로그램이 필요합니다.
컴파일러
컴파일러란, 어떤 언어를 다른 언어로 바꾸어 주는 프로그램을 말합니다. 현재 우리가 사용하는 GCC 컴파일러는,
C언어를 컴퓨터가 이해할 수 있는 기계어로 바꾸어 줄 겁니다. 이러한 과정을 컴파일이라고 합니다. (Compile)
컴파일 과정 살펴보기
컴파일 과정을 살펴보는 것은 매우 중요합니다.
먼저 우리가 작성한 소스 파일 foo.c를 생각해 봅시다.
소스 코드는 먼저 전처리기(Preprocessor)라는 친구에게 전달됩니다. 이 친구는 헤더 파일에 있는 소스를 우리의 소스 파일 foo.c에 붙여 넣어 주고 (정말 텍스트를 복사-붙여넣기를 하는 것으로 생각하면 됩니다.) , 프로그래머가 코드를 쉽게 볼 수 있도록 써놓은 주석은 제거해 둡니다.
헤더 파일
헤더는 도대체 무엇일까요? 방금 전에 작성한 코드를 살펴 봅시다.
#include <stdio.h> 에서, <> 안에 둘러쌓여 있는 .h로 끝나는 것이 헤더 파일입니다.
헤더 파일이란, 함수의 정보와 변수에 대한 정보를 담고 있는 안내서라 생각하면 됩니다. stdio.h 헤더 파일은 어떤 함수에 대한 정보와 변수에 대한 안내가 들어 있는 것일까요?
stdio란 Standard input output의 줄임말입니다. 표준 입출력이라는 뜻인데요, 우리가 작성했던 printf, 출력을 담당하는 함수에 대한 정보를 담고 있는 안내서입니다.
어떤 함수를 쓰려고 하면, 그 함수에 대한 정보가 필요하겠죠. 이러한 함수를 쓰기 전에, 그 함수에 대한 정보를 불러 들이겠다, 라는 의미로 #include 키워드를 사용했다고 생각하시면 됩니다.
다시 돌아와서
foo.c는 전처리기에 의해 foo.i라는 파일로 변환됩니다. 이러한 전처리된 파일은 컴파일러에게 가져다 줍니다.
컴파일러는 무슨 일을 할까
이제 이 전처리된 파일을 컴파일러가 .s 로 끝나는 어셈블리 언어로 바꾸게 됩니다. 우리가 작성한 foo.c를 컴파일러는 foo.s로 다음과 같이 바꿉니다.
어셈블리어로 변환된 파일을 보고 싶다면, 우분투 운영체제 쉘에서 다음 명령어를 입력하면 됩니다.
1 | gcc -S foo.c | cs |
변환된 파일은 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | .section __TEXT,__text,regular,pure_instructions .build_version macos, 11, 0 sdk_version 11, 1 .globl _main ## -- Begin function main .p2align 4, 0x90 _main: ## @main .cfi_startproc ## %bb.0: pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp subq $16, %rsp movl $0, -4(%rbp) leaq L_.str(%rip), %rdi movb $0, %al callq _printf xorl %ecx, %ecx movl %eax, -8(%rbp) ## 4-byte Spill movl %ecx, %eax addq $16, %rsp popq %rbp retq .cfi_endproc ## -- End function .section __TEXT,__cstring,cstring_literals L_.str: ## @.str .asciz "Hello, World!" | cs |
제 컴퓨터는 맥북이기 때문에, 인텔 CPU위에서 동작합니다. 우리의 컴파일러가 제 컴퓨터에 알맞게 동작하도록 어셈블리 언어를 변환한 결과입니다. 다음 명령어는 인텔 CPU에서 동작하는 어셈블리 언어로 컴파일러가 변환해 준 것입니다.
위 내용은 전혀 알 필요가 없습니다. 나중에 컴퓨터구조나, 시스템 프로그래밍을 공부하면 직접 어셈블리 언어로 프로그래밍 하는 방법을 배울 수 있을 것입니다. 컴파일러는 이 어셈블리 언어로 변환된 foo.s를 어셈블러에게 전달합니다.
어셈블러
어셈블러는 어셈블리 언어를 .O, 오브젝트 코드로 변환합니다. 이 단계가 데이터와 기계어를 포함하는 파일이죠. 하지만, 이 과정에서 다 끝난 것이 아닙니다.
링커
링커는 번역된 오브젝트 코드를 하나로 모아 실행 파일을 만듭니다. 나중에 아주 큰 프로젝트를 진행하게 되면, 소스 파일은 대단히 많아지고, 헤더 파일도 대단히 많아질 것입니다. 이러한 거대한 하나하나의 소스 파일이 오브젝트 코드가 되는데요, 이러한 여러 개의 목적 코드를 하나로 합쳐주는 프로그램이 링커입니다. 긴 여정이 끝나고, 우리가 실행 파일을 실행하면 명령 창(쉘)에
Hello,World!
가 출력되는 것입니다.
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
30분 공부하고 0
기지개를 펴는 나
-
[단독] 정부 “2026학년도 입시부터는 의대 증원 재논의 가능”… 새 타협안 검토 1
김건희 특검법 디올백 특검법 채상병 특검법 민주당 올리고 대통령 거부권쓰고 재의결...
-
놀랍게도 오르비에 썰을 풀 만한 일은 모두 오르비언 친구와 있을 때만 일어났어요...
-
뭐가 더 나음??
-
좀만 시끄러워도 깨서 귀마개하고 자는데 2시에 갑자기 깨고 다시 잤음 아침에...
-
4월 메대프 물2 응시했는데 33점.... 물론 실수가 좀 많긴 했지만 그래도...
-
여러 재수생들을 관찰해본 결과 2언더의 학생들은 재종에서 그나마 ㄱㅊ은 결과를 뽑아내는거 같음
-
03 아직 안갔다!!
-
단순히 인원증원했다고 안가는 사람은 거의 없지 않을까여
-
저는 경찰준비 하다가 집에서 대학생활은 즐겨보고 시험쳐라 해서 재수준비 하고...
-
ㄹㅇㅋㅋ
-
의대 증원되서 의대 안감vsR&D 삭감되서 이공계 안감 1
후자가 더 많지 않을까요
-
[고1~고3 내신대비 자료 공유] 2025 EBS 수능특강 국영수, 고1 국어, 고2 문학, 독서 분석 문제 배포 0
안녕하세요 나무아카데미입니다. 2025학년도 고1~고3 내신대비를 위해 수능특강...
-
작수 국어 6등급이었는데 4덮 원점수 87점 나와서 등급컷 높을 줄 알았는디 보정컷 후한거맞죠
-
엉덩이에 스테로이드 놔 줄 사람 찾는다는 글이 올라오네 ㅋㅋ
-
“1년이 지나도 썩지 않는 빅맥”…또 방부제 ‘논란’ 1
[헤럴드경제=장연주 기자] 영국의 한 여성이 구매한 지 1년이 지났는데도 멀쩡한...
-
자러가유
-
편입-)치전원 0
연고대로 편입후에 치전원 준비 하려고 합니다 치전원은 전적대 학벌이 중요하다고 알고...
-
. 0
모두 행복하세요 생의 마지막 날 인 것처럼
-
요즘 직책 수행에 권한대행 수행 업무를 하면서 느끼는 점이지만, 아무리 그 직책이...
-
거의 1년만에 에타 들어갔는데 공감수랑 댓글수 보고 처음 알았어요 ㅋㅋㅋ 평소에...
-
성공 0
-
국어 공부를 시작해보자!
-
얼버기 0605 1
-
수능공부하면 안피는게 안되네 ㅋㅋ
-
본교에 있는 학과들하고 성향이 많이 다른가요? 결 자체가 다른 느낌인가
-
흠 그냥 대한민국 계층 사다리의 종언이 아닌가 싶은데 뭐 의대 망하면 가재게붕어끼리...
-
근데 내가 본 교수님들은 수시에 대해서 별로 관심이 없었는데 0
그냥 점수대로 뽑으면 되는 걸 왜 그 난리법석을 떠는건지 잘 모르겠다는 스탠스 였음...
-
고파스에 재밌는 글이 많은 듯 어차피 반수할 생각이었고 남은 건 커뮤 계정 밖에...
-
(내신반영) 고마 치아라마!!!
-
아 진짜 ㅈ댔네 1
인생.
-
크아아아아아아아아아아앙 10
-
오르비 오랜만 1
입시는 계속된다
-
시험끝 1
연승가도열차출발
-
8 1
수
-
수 6
수
-
국어 5등급이면 2
인강으로 머리박치기 하는거보다 마닳 같은 교재로 혼자 풀고 해설보고 공부하면서...
-
https://youtu.be/SQqUAgSzDsM?si=F3R0iJVk16xfW_D...
-
지금 한종철 인강 듣고, 완자만 거의 다 풀어가는데 Ebs개념완성 완자 기출픽...
-
0.72에서 또 줄게있나보네...
-
본과생활을 겪고도 한번 더하는게 신기... 난 못해..
-
키크고 잘생기고 이쁨 ㅇㅇ 공부도 잘하
-
오야스미 2
네루!
-
달 사진 ㅁㅌㅊ 11
오늘 찍음
-
지구 기출도 2번 정도 풀었고.. 학평 치면 2이상은 무조건 나오는데 더프나...
-
한 2주전부터 루시드드림을 꾸기 시작했는데 나도 어케 하는건지 모르겠음 그냥...
-
작수 기하 93점인데 미적런 하는 게 맞을까요? 미적은 딱 기본개념만 알아요
-
2022학년도 수능 쳤고, 당시 윤도영 듣고 생명1등급이었습니다 3년만에 다시...
pwd
컴퓨터 추 누르고 갑니다