TL;DR
return 0;은
operating system에게
해당 file에서 더이상 실행할 것이 없음을 알리는 신호임.
즉,
file 실행의 마무리를 표현해줌으로써
이어지는 어떤 다른 프로그램이든, script이든, process이든
그런 것들이 지들 실행할 차례인지 확인할 수 있게 해주는 것.
보통 file 실행 중 0이 아닌 값이 반환되면,
그것은 해당 file에서 error가 발생한 것으로 간주되기 때문에
이 상황과 구분 짓기 위해
return 0;을
마지막 줄에 써주는 것이 일반적인 convention.
C언어 독학 첫날,
어김없이 찾아온 'hello world!' 출력 예제 시간.
내가 보는 교재는 Window의 Visual Studio 프로그램을 채택하여
예제 코드를 아래와 같이 안내했다.
#include <stdio.h>
void main(void)
{
printf("hello world!")
}
나는 mac을 사용하기에
Visual Studio Code에 C언어 pack과 code Runner extension을 설치하고,
해당 코드를 돌려보았다.
terminal에 hello world가 출력되긴 했지만,
아래와 같은 warning도 함께 나왔다.
test.c:3:1: warning: return type of 'main' is not 'int' [-Wmain-return-type]
void main(void)
^
test.c:3:1: note: change return type to 'int'
void main(void)
^~~~
Ho!!!
함수 return 값이 void니까 void를 써놨는데
왜 int type을 return하라는 건지..?
ChatGPT 슨새임께 질문을 드렸더니
main 함수의 return type을 int로 바꾸고,
마지막 줄에 return 0;를 추가하라는 안내를 받았다.
이렇게..
#include <stdio.h>
int main(void)
{
printf("hello world!\n");
return 0;
}
warning 없이 깔끔하게 실행되었다.
그러나
이어지는 나의 궁금증 4가지.
1. 왜?!! 쓸데없이 0을 반환해야하지?
2. 만일 main 함수에서 호출된 다른 함수가 0을 반환하면 어떡하지?
3. 근데 꼭 0이어야 하나? boolean type false를 반환한다면?
4. 혹시 return 0이 전기 신호 끊어도 좋다는 느낌인가?
1. 쓸데없이 0을 반환하는 이유
- C언어 프로그래밍의 오랜 convention임.
- operating system에게 해당 program의 실행이 마무리되었다는 신호를 보내는 것임.
- 0이 아닌 것이 반환되면 에러가 발생한 것을 뜻하기에, 그것과 구분 짓는 것임.
- 만일 해당 프로그램에 뒤이어 실행될
다른 프로그램이든 script이든 하는 애들이 있다면, 이 신호를 보고 자기 차례를 인지함.
- 그래서 매우 쓸 데 있는 코드임!
2. 만일 main 함수에서 호출된 다른 함수가 0을 반환하면 어떡하지?
- 뭘 어떡해...
main에서 어떤 함수를 호출한 결과 값을
main program의 실행 or 완료 신호로 사용하게 되는 거지.
- 코드로 생각한다면,
#include <stdio.h>
int alwaysComplete(void) {
return 0;
}
int main(void) {
int result = alwaysComplete();
return result;
}
alwaysComplete함수의 반환값이 main의 return 값이 되는거고,
main은 alwaysComplete함수를 사용하여
operating system에 exit status를 표시하게 되는 것!
3. 근데 꼭 0이어야 하나? boolean type false를 반환한다면?
- int 0은 bool false가 아님. 다름.
- 0 == false라는 JavaScript적인 생각은 C언어에서 절대 통하지 않음.
- 만약 main이 return false하면,
그건 그냥 main이 successfully completed되지 않았음을 표시하는 것.
- 0이 아닌 값이 return된 것이니까!
그니까 제발 전통적으로 써온 방식을 쓰라고 이 뺀질아~~~~(?)
덧붙이자면,
- 일단 boolean type은 C언어에 built-in된 type이 아님.
처음부터 쓰인 int의 오랜 전통을 무시할 수 없음.
- 글고, int type이 직관적이고 심플해서 C언어의 철학에 딱 맞음.
4. 혹시 return 0이 전기 신호 끊어도 좋다는 그런 느낌인가?
- 아님. 물리적으로 연결을 끊는 건 아님.ㅋ
- 근데 흠.. process를 terminate한다는 의미로 적용해본다면 맞는 느낌임…!
- ‘어어… 아님ㅋ 그치만 발상 시도는 좋았다!!’ 해주는 ChatGPT 슨새임의 반응이 따뜻해서 아래에 그대로 옮겨놓겠음
The analogy you're making with "zero" representing a disconnection of electricity is an interesting way to think about it, but it's not exactly the case. The return 0 at the end of the main function in C serves as an indication to the operating system about the exit status of the program, but it doesn't directly involve a physical disconnection of electricity.
When a program finishes execution, it communicates its exit status to the operating system. The convention is to use return 0 to indicate successful execution and a non-zero value to indicate an error or abnormal termination. This exit status can be used by other programs, scripts, or the operating system itself to understand whether the program completed its task successfully or encountered an issue.
The analogy with disconnection might be more applicable to the termination of processes. When a program finishes running, the operating system may reclaim resources and terminate the process. It's like unplugging a device or disconnecting a circuit after it has completed its task.
So, in a way, return 0 can be seen as signaling to the operating system that the program has been completed successfully, and the operating system can proceed with cleaning up and terminating the process. It's not about physically disconnecting electricity but rather about informing the system about the outcome of the program's execution.
그런 의미에서
return 0;
'CS Fundamentals > C' 카테고리의 다른 글
[Pointer] C언어의 포인터 이해하기 (0) | 2024.02.14 |
---|