이것은 "모든 것에 대한 상호 운용성 및 이식성"의 한계 (신화)를 반영하는 끝없는 이야기입니다.
"성공"을 나타 내기 위해 프로그램이 반환해야하는 것은 언어 사양이 아닌 값을받는 사람 (운영 체제 또는 프로그램을 호출 한 프로세스)에 의해 정의되어야합니다.
그러나 프로그래머는 "이동 가능한 방식"으로 코드를 작성하기를 좋아하므로 반환 할 기호 값을 정의하는 "운영 체제"개념에 대한 자체 모델을 발명합니다.
이제 다 대다 시나리오 (많은 언어가 많은 시스템에 프로그램을 작성하는 역할을하는 경우)에서 "성공"에 대한 언어 규칙과 운영 체제 1 (아무도 항상 동일하다고 허용 할 수 없음) 간의 대응이 이루어져야합니다. 특정 대상 플랫폼에 대한 라이브러리의 특정 구현에 의해 처리됩니다.
그러나-불행히도-C 언어가 배포되었을 때 (주로 UNIX 커널을 작성하기 위해) 명확하지 않은이 개념과 "return 0은 성공을 의미합니다"라고 쓰여진 책의 기가 그램은 OS에서 사실 이었기 때문에 그 시간에는 C 컴파일러가 있습니다.
그 이후로 그러한 서신을 어떻게 처리해야하는지에 대한 명확한 표준화가 이루어지지 않았습니다. C와 C ++에는 "반환 값"에 대한 자체 정의가 있지만 적절한 OS 번역을 제공하는 사람은 없습니다 (또는 더 나은 방법 : 이에 대해 설명하는 컴파일러 문서는 없음). 0은 UNIX (LINUX) 및-독립적 인 이유로-Windows에서도 true이면 성공을 의미합니다. 이는 대부분의 경우 반환 값을 무시하는 기존 "소비자 컴퓨터"의 90 %를 포함합니다. 수십 년 동안 토론하면 아무도 눈치 채지 못할 것입니다!)
이 시나리오 내에서 결정을 내리기 전에 다음과 같은 질문을하십시오.-내 기존에 대해 발신자에게 무언가를 알리고 싶은가? (내가 항상 0을 반환한다면 ... 모든 것에 대한 단서가 없습니다)-내 발신자 가이 통신에 대한 규칙을 가지고 있습니까? (단일 값은 규칙이 아닙니다. 정보 표현을 허용하지 않습니다.)
이 두 가지 대답이 모두 '아니요'라면 좋은 해결책은 주 return 문을 전혀 작성하지 않는 것입니다. (그리고 컴파일러가 타겟에 대해 결정하게하십시오).
규칙이없는 경우 0 = 성공은 대부분의 상황을 충족합니다 (규칙을 도입하는 경우 기호 사용은 문제가 될 수 있음).
규칙이있는 경우, 그 규칙과 일관된 기호 상수를 사용하고 플랫폼간에 값 일관성이 아닌 규칙 일관성을 보장하십시오.