1. 개요
1.1 문서 개요
이 문서는 C++의 main()
함수 구조에 관해 기록하는 문서입니다. 또한 해당 함수가 프로그램 실행 흐름에서 갖는 의미와 역할에 대해서도 설명합니다. main()
함수는 C++ 프로그램의 진입점(entry point)으로, 모든 C++ 실행 프로그램은 반드시 하나의 main()
함수를 포함해야 하며, 운영체제는 프로그램을 실행할 때 이 함수를 가장 먼저 호출합니다.
2. 내용
2.1 main() 함수의 기본 구조
2.1.1 함수 시그니처
main()
함수는 반환형과 매개변수 유무에 따라 여러 형태로 정의될 수 있습니다. 가장 일반적인 두 가지 형식은 다음과 같습니다:
int main() {
// 실행 코드
return 0;
}
int main(int argc, char* argv[]) {
// 실행 코드
return 0;
}
int
: 함수의 반환형이며, 운영체제에 종료 상태를 알리는 정수 값을 반환합니다.argc
: 전달된 명령행 인자의 개수 (argument count)argv
: 전달된 명령행 인자를 저장한 문자열 배열 (argument vector)
2.1.2 반환값의 의미
main()
함수는 정수 값을 반환해야 하며, 일반적으로 0
은 정상 종료를 의미하고, 0
이외의 값은 오류 상태를 나타냅니다. 운영체제나 호출 스크립트에서 이 값을 사용하여 실행 결과를 판별할 수 있습니다.
return 0; // 정상 종료
return 1; // 일반적인 오류
return -1; // 시스템 오류
2.2 main() 함수의 실행 흐름
2.2.1 프로그램 시작과 종료
- 운영체제는 프로그램 실행 시
main()
함수를 호출합니다. main()
함수 내부의 코드가 순차적으로 실행됩니다.return
문을 만나거나 함수 블록이 종료되면 프로그램이 종료됩니다.return
문으로 반환된 값은 운영체제에 전달됩니다.
2.2.2 예외 처리와 종료
C++에서는 main()
함수 내에서 예외가 발생하면 이를 try-catch
블록으로 처리할 수 있습니다. 처리하지 않은 예외가 발생할 경우, 프로그램은 비정상적으로 종료됩니다.
int main() {
try {
// 실행 코드
} catch (const std::exception& e) {
std::cerr << "예외 발생: " << e.what() << std::endl;
return 1;
}
}
2.3 명령행 인자 처리
2.3.1 argc와 argv 활용
main(int argc, char* argv[])
형태를 사용할 경우, 프로그램은 명령행 인자를 처리할 수 있습니다. 예를 들어, 사용자가 프로그램 실행 시 옵션이나 파일명을 전달할 수 있습니다.
int main(int argc, char* argv[]) {
std::cout << "인자 개수: " << argc << std::endl;
for (int i = 0; i < argc; ++i) {
std::cout << "인자 " << i << ": " << argv[i] << std::endl;
}
return 0;
}
2.3.2 실용적 예제
다음은 파일 이름을 인자로 받아 출력하는 간단한 예제입니다:
int main(int argc, char* argv[]) {
if (argc < 2) {
std::cerr << "사용법: " << argv[0] << " <파일이름>" << std::endl;
return 1;
}
std::cout << "입력받은 파일 이름: " << argv[1] << std::endl;
return 0;
}
2.4 main() 함수와 표준 규약
2.4.1 ISO C++ 표준에서의 정의
ISO C++ 표준에 따르면 main()
함수는 반드시 int
형을 반환해야 하며, 반환값이 정의되지 않거나 void main()
과 같이 정의할 경우, 이는 표준에 위배됩니다. 일부 컴파일러에서는 void main()
을 허용하지만, 이식성과 호환성 면에서 바람직하지 않습니다.
2.4.2 C++17 이상에서의 반환 생략
C++17부터는 main()
함수에서 return 0;
을 생략하더라도 컴파일러가 자동으로 0
을 반환합니다. 하지만 명시적으로 작성하는 것이 더 명확한 코드 스타일로 간주됩니다.
int main() {
std::cout << "Hello, World!" << std::endl;
// return 0; 생략 가능 (C++17 이상)
}
3. 마무리
C++에서 main()
함수는 프로그램의 시작점으로, 함수의 정의 방식, 반환값, 명령행 인자 처리 방식 등이 프로그램의 전체 실행 구조에 영향을 미칩니다. ISO C++ 표준에 따라 int main()
을 사용하는 것이 권장되며, 다양한 환경에서도 이식 가능하도록 명확한 반환값과 예외 처리를 포함하는 구조를 설계하는 것이 바람직합니다. main()
함수는 단순한 시작 지점이 아니라, 프로그램의 실행 안정성과 인터페이스를 정의하는 핵심적인 요소로 작동합니다.