C언어/C언어 간단 개념 정리

19강. 프로그램의 전처리, 컴파일, 링크의 이해

Dev dreamer 2023. 1. 12. 10:12

출처: 정혜경 판타스틱 자료구조 입문 (in C)

[무료] 정혜경 판타스틱 자료구조 입문 (in C) - 인프런 | 강의 (inflearn.com)

 

 

 

a.c  프로그래머에 의해 작성된 원시파일( text 상태)

기계가 해석하는게 아닌 사람이 해석한다.

 

전처리 작업을 해줌.(필요한 외부파일 , 상수정의 등을 해줌)

 

 

 

변형된 원시파일 역시 여전히 text 파일형태이다

이때 compiler에 의해 전처리기에서 변형된 내용을 기계어로 번역을 한다.

 

그러면 CPU가 알아들을수 있는 상태인 기계어 상태로 변화한다.

 

 

 

이후에 기계어 코드 실행에 필요한 코드들을 삽입하고

Start_up_code(main 함수 호출하는 코드)

Library_Routine

 

프로그렘내에서 소스파일이 여러개일 경우 Object 파일을 연결한다.

 

 

compiler로 기계어로 바꾸는거 외에도 실행에 필요한 linker 의 과정도 필요하다.

 

 

 

compiler 로 기계어로 해석하고 이후에 linker의 목적 코드들을 추가해줘야 실행이 되고 소스파일이 여러개일 경우 object 파일들을 연결해준다.

사람이 보기 위한 소스코드(원시 코드)

 

우리들이 작성한 원시코드를 전처리기가 먼저 전처리 작업을 한다.

 

전처리 작업을 통해

 

# 으로 이루어진 코드들을 먼저 작동해준다

 

전처리 작업을 진행하면 #include<stdio.h> 가 사라진다.

 

\

 

전처리기가 작동하고 나면 #include<stdio.h>는 사라지고


stdio.h 에 들어있던 약 200여줄의 코드들이 들어와 있는

 

변형된 원시코드로 바뀌게 된다

 

그외에도 #define 한 코드값들에도 정의한 상수값이나 문자열이 삽입된다.

 

 

 

 

이후에 compile 을 통해서 기계가 이해할 수 있는 언어로 변경된다.

 

 

 

 

 

그러면 이후에 linker 를 통해서

start up code 를 붙여주고 아리애 library Route 를 붙여준다

이러한 과정이 거쳐야 실행할수 있는 파일로 변화한다.

 

Os 가 실행해 ! 명령을 준다.

Start up code 에 main()을 call 할 수 있다.

 

main이 설정된 코드의 순으로 작동이 완료가 되고

 

main 함수의 실행이 끝나면 제어가 다시 start up code로 돌아가서

남은 코드들을 실행을 진행하는데 할당받았던 기억공간, 메모리 등을 다 반납하고 OS 로 제어값으로 넘어가게 된다.

 

Quiz: C언어에서 어디에서 가장 먼저 실행되나요? Start up code 입니다.

Start up code 에서 main 을 실행해주는 구조입니다.

main이 작동했을때를 보면 printf 와 같이 정의되지 않은 부분의 함수가 바로 작동되는 것을 볼 수 있는데

 

이러한 printf의 기계어 코드가 보이지 않는다.

 

바로 이러한 부분이 Library Route 에 printf()의 기계어 코드가 존재한다. 정의부 기계어 등이 모여있다.

 

 

 

 

main 함수가 종료할때 return 해주는 0 은요?? 이를 start up code 에 반환해서 다시 OS 에서 결과값이 0이 나왔음을 반환한다.

 

OS 의 중에선 이러한 MAIN 에서 반환한 RETURN 값을 사용하는 것과 아닌 것으로 나뉜다.

 

Window : main 함수의 return 값을 사용 안함

unux(linux) : main 함수의 return 값을 사용함.

 

그래서 보통 window 용으로 void main() 을 작성할수 있긴한데 하면 안됨 ->unix 등에서 호환이 불가능함.

 

unix 같은 경우는 return 문의 결과값을 이용해서 아 결과가 제대로 나왔네 ? 그럼 이어서 다른 작업을 해야겠다

 

하고 이어지는 프로그램에서 작업을 이렇게 해야겠다 라는 명령을 연속적으로 내릴 수 있다.