UFO ET IT

main 끝에 있는 return 0을 선택적으로 만든 이유는?

ufoet 2023. 8. 21. 22:43
반응형

main 끝에 있는 return 0을 선택적으로 만든 이유는?

는 C99와 한 것을 .return 0또는return EXIT_SUCCESS의 끝에 답례품이 공급되지 않는 경우main또한 비슷한 시기에 C++ 언어 표준에 상응하는 동일한 변화가 있었습니다.저는 두 가지 이유 모두에 관심이 있으며 완전히 별개이고 관련이 없는 변화일 가능성은 낮다고 추측했습니다.

제 질문은:

이 변경에 대한 문서화된 근거는 무엇이었습니까?

이상적인 답변은 C와 C++ 모두에 대한 권위 있는 출처를 인용할 것이며, 이것이 제가 두 언어로 질문에 태그를 붙인 이유입니다.

ISO C++에서 메인에서 0을 반환하는 이유는 무엇입니까?라는 질문과 달리, 저는 작성 여부에 대한 조언을 구하는 것이 아닙니다.return 0제 프로그램에서 -- 저는 왜 언어 표준 자체가 바뀌었는지 묻고 있습니다.


질문의 목적을 이해하는 데 도움이 되기 위해 다음과 같은 맥락이 조금 더 있습니다.

  1. 변경된 이유를 이해하는 것은 사용 방법을 결정하는 데 도움이 됩니다.
  2. 이론적 근거는 종종 표준 자체에 포함됩니다.예를 들어, C90 표준에는 "이 목록의 의도는...."

저는 여기서 질문하기 전에 스스로 답을 찾기 위해 기준을 공부했지만 답을 찾지 못했습니다.저는 프로그래머 그룹을 위해 두 언어에 대한 코딩 표준을 작성하는 것을 도와달라는 요청을 받았고 다른 사람들에게 정확하게 사용법을 설명할 수 있도록 이 기능이 왜 존재하는지 확실히 이해하고 싶었습니다.

The New C Standard 섹션 5.1.2.2.3 프로그램 종료에서 C99 표준의 다음 행에 대한 저자 Derek Jones 설명:

주 기능을 종료하는 }에 도달하면 값 0이 반환됩니다.

다음과 같습니다.

기준은 결국 엉성한 기존 관행에 굴복해야 합니다.

이는 이론적 근거가 값을 명시적으로 반환하는 것과 관련하여 좋지 않은 프로그래밍 관행을 해결하기 위한 것이었음을 나타냅니다.main이전에 반환된 상태는 정의되지 않았습니다.

그는 많은 구현이 이미 C90에서도 이를 구현했기 때문에 이러한 변화가 이미 일반적인 구현을 반영했다는 사실도 도움이 되었을 것이라고 말합니다.

C99에 대한 공식적인 근거 문서는 거의 이것을 다루지 않습니다.는 것 같습니다.exit(0) 시 제어 된 것은 " main" 입니다.exit(0)의미 있는 휴대용 의미론이 주어졌습니다.

다음은 두 개의 관련 섹션입니다.

5.1.2.2.1 프로그램 시작

에 대한 main 그고상 작호의용의 .exit,main그리고.atexit(제7.20.4.2항 참조)는 문자열 표현과 에서 반환되는 값의 의미에서 원하지 않는 다양성을 억제하기 위해 코드화되었습니다.

argc그리고.argv주요 주장이 광범위한 사전 관행을 인정하기 때문입니다.

argv[argc]또한 일반적인 관행에 따라 목록 끝에 대한 중복 검사를 제공하기 위해 null 포인터여야 합니다.

main는 0 입니다 0 개 인 로 선 수 한 함 일 입 니다 수 는 는 수 할 의 ) ▁functions ' ▁must ▁( ▁and ▁inv ▁defin ▁of ▁that ▁is ▁exactly ▁either ▁match ▁arguments 0 ▁the ▁other ▁between ▁or ▁function ▁port ably ▁arguments ▁two ▁be ▁zero ▁may ▁only ▁declared ▁number(다른 함수의 인수 수는 호출과 정의 사이에서 정확히 일치해야 합니다.)이 특별한 경우는 단순히 논쟁을 중단하는 널리 퍼진 관행을 인식합니다.main프로그램이 프로그램 인수 문자열에 액세스하지 않는 경우.이 은많구두개인지만원에 대한 두 개 하지만,main그러한 관행은 표준에 의해 축복되거나 금지되지 않습니다; 3개의 인수로 주요를 정의하는 프로그램은 엄격하게 준수하지 않습니다(§ J.5.1 참조).

명령줄 I/O 리디렉션은 C 언어가 아닌 기본 운영 체제의 기능으로 간주되었기 때문에 Standard에 의해 의무화되지 않습니다.

그리고.

7.20.4.3종료 기능

에 대한 입니다.exit호출 환경으로 반환되는 상태 표시입니다.UNIX 운영 체제에서 값 0은 프로그램의 성공적인 반환 코드입니다.C의 사용이 UNIX 이상으로 확산됨에 따라, 반환 코드의 다른 시스템을 가진 운영 체제에서도 종종 성공적인 종료를 나타내는 관용구로 유지되어 왔습니다.따라서 이 사용법은 표준으로 인식됩니다.성공적이지 못한 종료를 나타내는 휴대용 방법은 없습니다, 다음과 같은 주장 이후로.exit구현이 정의되어 있습니다.EXIT_FAILURE매크로는 이러한 기능을 제공하기 위해 C89에 추가되었습니다.EXIT_SUCCESS또한 추가되었습니다.

에, 프그래머명가암시전한제화는고외하를호화로로으적▁explicit,▁aside는,exit에서 반시호다니에서 할 때 됩니다.main 이 그므로적이경우어, 는체신의 .exit에서는 자동 는 자동 저장 기간이 할 수 .exit.

는 위회는다추고다니의 추가를 했습니다._exit그러나 POSIX 사양과 호환되지 않는다는 우려 때문에 이를 거부했습니다.예를 들어, 한 가지 우려 사항은 다음과 같습니다._exit신호를 않고 ._exitPOSIX 환경에서 동작합니다.희망을 주기를 ( C99의 경우 7.20.4.4를 참조하십시오.

언급URL : https://stackoverflow.com/questions/31394171/what-was-the-rationale-for-making-return-0-at-the-end-of-main-optional

반응형