TIL #057
오늘 한 것
알고리즘
- 프로그래머스, 2 x n 타일링
- 프로그래머스, 소수 찾기
CS
- CS50 강의 수강 (~ C언어)
오늘 배운 점
C언어의 main함수가 int로 선언되는 이유
C언어에서 함수를 선언할 때, 함수 앞에서 선언되는 타입은 그 함수가 리턴할 값의 타입을 의미한다.
main 함수도 함수이므로, 함수명 앞에 타입을 지정해 줄 수 있다. 근데 대부분의 main 함수들은 int로 선언되는 것을 볼 수 있다. main은 별도로 리턴하는 값이 없음에도 왜 int로 리턴값이 지정되는게 관용적인 것일까. 만약 void main으로 리턴값 타입을 지정하면 문제라도 생기는 것일까?
결론부터 이야기하면 int main()이나 void main()이나 차이가 없다.
사용자 입장에선 말이다. 하지만 운영체제 입장에선 차이가 있다.
main은 프로그램의 엔트리포인트로서, 운영체제가 실행하는 일종의 ‘함수’이다. 즉 이 main 함수의 리턴 값을 운영체제가 받게 되어있다.
운영체제는 프로그램(main 함수)의 리턴 값을 통해 해당 함수가 정상적으로 종료되었는지 여부를 판단한다. 보통의 경우, 프로그램이 종료되고 0이 리턴되었을 때 해당 프로그램의 정상적으로 종료되었다고 판단하며, 그 이외의 값을 리턴받게 되면 프로그램이 정상적으로 종료되지 않았다고 간주한다. 즉 main 함수 앞에 지정한 리턴값 타입은 운영체제가 프로그램의 종료 유형을 판단하는데 있어 도움을 준다.
정리하자면, main 함수 리턴값이 int 이던 void이던 그 무엇이던 사용자 입장에서는 전혀 상관없는 일이다. 하지만 운영체제 입장에서는 다를 수 있으므로, 정상값으로 통용되는 int를 리턴값으로 선언해주도록 하자.
오늘 느낀점
C언어에서 사용자 지정 함수에 대해 배우던 도중, 왜 main 함수는 리턴 값 타입을 int로 하는 것이 일반적인지 궁금해졌다. 찾아본 결과 전혀 몰랐던 운영체제에 대해서 약간은 이해할 수 있어 기뻤다. 동시에 운영체제도 결국 거대한 하나의 함수,,, 정말 그 모든 것은 bit로 이루어져 있구나..라는 사실이 와닿는 기분이 들어서 묘해졌다.
우리는 얼마나 편리한 세상에서 살고 있는가. 무지가 죄악이 아닌 세상이라니, 얼마나 아름다운가!
덧붙여, 무지가 죄악이 아니도록 만들어주는 개발자라는 직업 또한 정말, 정말 정말 매력적이다.