전공 수업중 "main함수는 뭐고 왜 return 0; 를 해주는거에요?" 라고 질문을 받았을때 나는 명확하게 답하지 못하고 프로그램이 실행되는 함수라고만 설명하고 넘어간적이 있었다.
이번 기회에 명확하게 정리하고자 이 글을 쓴다.
내가 평소에 생각하고있던 C/C++의 main 함수에 대해 적어보자.
- 프로그램의 실행을 위한 함수다.
- return에 의해 종료된다.
- int와 void를 리턴한다.
우선 main 함수는 응용 프로그램을 실행하면 운영체제에 의해 (해당 응용 프로그램의 부모 프로세스)처음 실행된다. 즉 프로그램의 시작점이다. 모든 프로그램은 main함수를 하나 가지고 있어야한다.
처음 공부를 시작한 사람들이 실수하는 경우가 있는데(나도 처음에 이런 실수를 했다), 위와 같은 이유로 프로젝트 내에는 하나의 main 함수만 있어야한다. 두개가 있는 경우 어디가 시작점인지 알 수 없다.
main함수의 선언 구문이다.
int main(void)
{
// ...
return 0;
}
다음과 같이 매개변수 없이도 가능하다
int main()
{
// ...
return 0;
}
매개변수를 지정하지 않는다는것은 무슨 의미일까?
C에서는 여러 매개변수를 사용 or 매개변수 없이 사용 가능함을 의미한다.
C에서 main()는 여러 매개변수를 사용하여 호출 가능하지만 main(void)는 매개변수 없이만 호출이 가능하다.
의미적인 면에서는 main(void)가 더 좋다고 생각한다.
main함수가 선언될수 있는 경우들이다
int main()
{
// ...
}
int main(void)
{
// ...
}
main()
{
// ...
}
void main()
{
// ...
}
main(void)
{
// ...
}
void main(void)
{
// ...
}
C99 버전(1999년)이후부터는 int main 함수에서 return 0; 을 꼭 써주지 않더라도 프로그램이 별 문제 없이 잘 종료 되었다면 main 함수가 알아서 0 을 리턴하게끔 편하게 바뀌었다.
main 함수가 0 을 리턴하면 운영체제는 프로그램이 잘 끝났구나하고 알게된다.
프로그램의 실행이 실패하면 0이 아닌 운영체제가 제공한 특정 코드가 리턴된다. 우리는 이를 통해 어떠한 오류가 있음을 알 수 있다.
간단하게 한 문장으로 정리를 해보자.
- 프로그램이 실행되면 운영체제에 의해 main이 호출되며 운영체제는 main의 리턴을 통해 오류발생 여부를 감지한다.
'C++' 카테고리의 다른 글
Automatic Storage, Static Storage, and Dynamic Storage (0) | 2024.02.12 |
---|---|
포인터와 문자열 (2) | 2024.02.12 |
C++ 동적 메모리 할당 (0) | 2024.02.04 |
C++ Pointer (0) | 2024.02.04 |