C++ 정리 - 10 main 함수
소스 코드는 main
함수에서부터 실행된다.
모든 C++ 프로그램엔 main
함수가 있어야 한다. main
함수가 없으면 에러가 난다.
(Dynamic-link libraries와 static libraries 에는 main
함수가 없다)
세부 사항
- 내 프로그램에서
main
함수를 호출할 수 없다. main
함수를 재귀적으로 호출할 수 없다.main
함수의 주소를 가져갈 수 없다.- 미리 정의(predefine)할 수 없다.
- 전역 네임스페이스의 이름
main
은 예약되어 있다. - 오버로딩, delete할 수 없으며,
constexpr, consteval, inline, static, auto로 선언할 수 없고,
coroutine이 될 수 없다. - 명시적인 초기화(explicit initializer)가 없는
static
클래스의 멤버들은main
함수가 실행되기 전 0으로 초기화된다. - Microsoft C++에서는 전역 객체도
main
함수 전에 초기화된다.
main 함수의 형태
main
함수의 선언은 언어에 이미 들어가 있기 때문에 선언을 하지 않는다.- 만약 했다면 다음과 같이 생겼을 것이다.
int main();
int main(int argc, char *argv[]);
main
함수의 리턴값이 정해지지 않았다면, 컴파일러가 리턴값을 0으로 정한다.argc
와argv
의 타입은 언어가 정의한다. 이름은 임의로 바꿔도 괜찮다.char* argv[]
를char** argv
로 해도 괜찮다.main
함수의 인자로 커맨드 라인을 편하게 받을 수 있다.argc
:argc
+ 1 =argv
의 인자 수.
항상 0보다 크거나 같은 정수이다. (어디선 최소1이라함)argv
: null로 끝나는 string의 배열이다.argv[0]
: 널 포인터가 아닐 경우 프로그램을 실행한 커맨드 등의 이름을 가리키거나""
를 가리킨다.argv[1]
과 그 다음 : 커맨드들이다.- 마지막 커맨드 라인은
argv[argc - 1]
이다. argv[argc]
는 항상 널 포인터이다.
- 커맨드 라인을 다루는 자세한 방법은 아래를 참고하자.
https://docs.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=msvc-170#parsing-c-command-line-arguments
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 main
함수에서 function-try-block을 사용했다면, static 객체의 소멸자로 인한 예외(exception)은 잡히지 않는다.
마이크로소프트 한정
wmain
을 사용하면main
함수를wchar_t
버전으로 사용할 수 있다.
int wmain();
int wmain(int argc, wchar_t *argv[]);
tchar.h
에 define된 전처리 매크로_tmain
은_UNICODE
가 정의됐으면wmain
이 되고, 정의되지 않았으면main
이 된다._t
로 시작하는 다른 매크로들은 narrow 혹은 wide character sets 양쪽으로 다른 버전으로 코드를 만들기 좋다. 더 많은 정보는 아래를 참고하자.
https://docs.microsoft.com/en-us/cpp/c-runtime-library/using-generic-text-mappings?view=msvc-170
main 함수에서 void 리턴하기
- 마이크로소프트 기준으로
main
과wmain
은void
리턴값을 가질 수 있다. main
이 리턴값이 없을 때 대칭을 위해 사용할 수 있다.- 리턴값이
void
일 경우 exit code를 리턴할 수 없기 때문에 추천하지 않는다. 이 경우exit
함수로 exit code를 리턴해야한다.
envp 커맨드 라인 인자
envp
인자를 통해서 환경 변수에 접근할 수 있다.- 자세한 사항은 아래 링크를 참고하자.
https://docs.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=msvc-170#the-envp-command-line-argument
출처
1) https://docs.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=msvc-170
2) https://en.cppreference.com/w/cpp/language/main_function
내용 수정
최초 작성 : 2022.04.16. 00:36
Author And Source
이 문제에 관하여(C++ 정리 - 10 main 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@chorogchip/Cpp-정리-10-main함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)