void main과 int main의 차이점은 무엇입니까?
이 질문에 이미 답변이 있습니다.
내 C ++ 프로그램을 선언하는 방법이 중요합니까?
차이점은 하나는을 정의하는 올바른 방법 main
이고 다른 하나는 그렇지 않다는 것입니다.
그리고 네, 중요합니다. 어느 한 쪽
int main(int argc, char** argv)
또는
int main()
main
C ++ 사양에 따라 적절한 정의입니다 .
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
'programing' 카테고리의 다른 글
Retrofit 2를 사용하여 모든 요청에 쿼리 매개 변수를 추가하는 방법이 있습니까? (0) | 2021.01.17 |
---|---|
BigDecimal, 정밀도 및 스케일 (0) | 2021.01.17 |
소켓 수락- "열린 파일이 너무 많습니다" (0) | 2021.01.17 |
파이썬에서 숫자 비교를 위해“is”또는“==”를 사용하는 것이 더 낫습니까? (0) | 2021.01.17 |
document.all 대 document.getElementById (0) | 2021.01.17 |