(C언어) 프로그램 실행 시 main을 어떻게 찾아갈까?
2024. 1. 2. 11:19ㆍ코딩세상/C-언어
프로그램을 짜다 보면, 항상 시작을 main 함수부터 구현을 한다.
근데 이 main이라는 함수는 어떻게 배치가 되기에 컴퓨터가 알아서 찾아갈까??
이런 의문을 가지신 분들이 있을거에요.
아주 오래전에는 link시 main 함수가 있는 파일을 제일 먼저 언급하고, 해당 파일에서 main 함수가 맨 앞에 나오도록 작업을 했다고 하면 믿을까요???
link에 따라 실행이 되지 않는 현상이 발생을 했다고 하면 지금 세상에서는 믿지 않겠지만.. 사실 그랬습니다.
다음과 같이 코딩을 하고 컴파일을 해 보자.
int Main(int argc, char **argv) { } |
아래와 같이 나랑 관계없어 보이는 Scrt1.o라는 object에 _start라는 함수에서 에러가 났다고 나온다.
cc main.c -o main /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o: in function `_start': (.text+0x1b): undefined reference to `main' collect2: error: ld returned 1 exit status |
시스템마다 object의 이름은 다르지만, ld link는 처음 시작 지점에 특정 object를 배치하고, 해당 object의 시작점에서 main 함수를 부를 수 있도록 해 두어서, main의 함수가 어디에 있든 상관없이 해당 함수 주소를 맨 앞에 있는 object의 시작점에서 부를 수 있도록 해 두었다.
해당 object덕분에 위치에 상관없이 항상 우리가 원하는 프로그램은 main에서부터 구현을 하면 되는 것이다.
파일 이름과 위치에 상관없이 작업을 해 줄 수 있도록 link에서 처리를 해 둔 것이다.
'코딩세상 > C-언어' 카테고리의 다른 글
(C언어) String의 주소 이해하기 ("...") (1) | 2024.01.09 |
---|---|
(C언어) 연속된 enum 처리를 위한 switch문 사용하기 (case 0 ... 9:) (0) | 2024.01.08 |
(C언어) 변수에 저장된 값을 10진수 16진수 string으로 변환하기 (0) | 2024.01.05 |
(C언어) printf() 함수 성능 및 예외 상황에서 출력 이해하기 (1) | 2024.01.04 |
(C언어) 예제 프로그램 컴파일 하기 (3) | 2024.01.03 |