programing

void main과 int main의 차이점은 무엇입니까?

copyandpastes 2021. 1. 17. 12:31
반응형

void main과 int main의 차이점은 무엇입니까?


이 질문에 이미 답변이 있습니다.

내 C ++ 프로그램을 선언하는 방법이 중요합니까?


차이점은 하나는을 정의하는 올바른 방법 main이고 다른 하나는 그렇지 않다는 것입니다.

그리고 네, 중요합니다. 어느 한 쪽

int main(int argc, char** argv)

또는

int main()

mainC ++ 사양에 따라 적절한 정의입니다 .

void main(int argc, char** argv)

IIRC는 이전 Microsoft의 C ++ 컴파일러와 함께 제공되는 변태입니다.

https://isocpp.org/wiki/faq/newbie#main-returns-int


Bjarne Stroustrup 은 이것을 매우 명확하게했습니다.

정의 void main()는 C ++이 아니고 C도 아니고 C도 아닙니다.

참조를 참조 하십시오 .


당신은 사용해야합니다 int main. C 및 C ++ 표준 모두 main값을 반환하도록 지정합니다 .


C ++의 경우 int 만 허용됩니다. C의 경우 C99는 int 만 허용됩니다. 이전 기준은 void반품을 허용했습니다 .

간단히 말해서 항상 int.


요점은 C 프로그램 (및 C ++이 동일)은 항상 성공 값 또는 오류 코드를 반환하므로 이러한 방식으로 선언해야한다는 것입니다.


오래 전에 나는 "표준이 유효하지 않다고 말한다"라는 주장 외에 많은 이유를 포함하고있는 이 페이지 (void main (void))발견했다 . 특정 운영 체제 / 아키텍처에서는 스택이 손상되거나 기타 불쾌한 일이 발생할 수 있습니다.


C ++에서 main()반환해야합니다 int. 그러나 C99는 main()int반환 유형을 허용 합니다. 다음은 C99 표준에서 발췌 한 것입니다.

5.1.2.2.1 프로그램 시작

프로그램 시작시 호출되는 함수의 이름은 main입니다. 구현은이 함수에 대한 프로토 타입을 선언하지 않습니다. 반환 유형이 int이고 매개 변수없이 정의되어야합니다.

int main(void) { /* ... */ }

또는 두 개의 매개 변수를 사용합니다 (여기서는 argc 및 argv라고합니다. 이름은 선언 된 함수에 로컬이기 때문에 모든 이름을 사용할 수 있음).

int main(int argc, char *argv[]) { /* ... */ }

또는 동등한 것; 또는 다른 구현 정의 방식으로 .

또한 gcc는 void main()실제로 컴파일 되지만 return 0;닫는 중괄호를 만나면 수행합니다.


당신은 사양에 의해려고하는 경우에, 당신은 항상 선언해야 main를 반환 int.

그러나 실제로 대부분의 컴파일러는 둘 중 하나를 사용하여 벗어날 수 있으므로 실제 차이점은 쉘에 값을 반환해야하는 경우입니다.

참조 URL : https://stackoverflow.com/questions/636829/difference-between-void-main-and-int-main

반응형