2010-04-06 5 views
3

C++ 표준에 따르면 return 0이 반환 문이 주어지지 않으면 main() 끝에 삽입됩니다. 그러나 나는 종종 최근에 작성된 표준 준수 C++ 코드가 main()의 끝에 0을 명시 적으로 반환하는 것을 보았습니다. 컴파일러가 자동으로 수행하는 경우 어떤 이유로 명시 적으로 0을 반환하겠습니까?ISO C++에서 main에서 0을 반환하는 이유는 무엇입니까?

+6

아, main()의 신비. 확실히 좋은 프로그래머는이 규칙이 그가 쓰는 다른 코드의 99.99 %와 다른 main()을 처리하도록해야한다고 가정하지 않기 때문입니다. 그녀는 포함했다. –

+2

흠, 그렇게 생각하지 않았어.C와 같은 함수 반환 형식을 생략하는 것과 비슷합니다. 나는 항상 그것이 일종의 응달이되었다고 생각했다. – Maulrus

+1

원칙적으로 0이 아닌 유효한 반환 값이 아닌 한'return 0; '을 쓰지 않습니다. 그것은 나를 반역자로 느끼게합니다. –

답변

10

표준이 엄격하게 필요하지 않다고하더라도 무효 반환 유형이있는 함수에서 "반환"하지 않는 것만으로 이상하게 보입니다.

+0

나는 100 % 확신 할 수는 없지만 표준에 의하면 엄격히 필요함을 기억하고 있습니다. – Sergio

+1

@Sergio : void가 아닌 함수의 끝이 return 문없이 끝나면 정의되지 않은 동작이 발생합니다. 그러나 main은 묵시적으로'return 0;'을 리턴합니다. – GManNickG

3

코드의 동작을 명시 적으로 만듭니다.

1

이것은 30 년 전의 결과입니다. 그것은 국제 대회 IMO의 이상입니다.

+1

그것은 좋은 이유가 아닙니다 IMO – juan

+0

@Juan 개인적으로'main'의 끝에'return 0'을 쓰지 않습니다. 필자는 왜 그것이 필요하지는 않은지 왜 우리가 보는지에 대한 질문에 대답하고 있습니다. – AraK

+0

제가 아는 바로는, 30 년 전 그들이 어떻게했는지는 그렇게하지 않는 이유가 더 많기 때문입니다. – juan

14

명시 적으로 말하면 명시 적으로 사용자의 의도를 나타내고 있습니다.

무언가에 의존함으로써 2 가지 경우를 가질 수 있습니다. 1) 의도 했었습니다. 2) 잊어 버렸습니다.

+0

그런데 왜 그 두 경우가 중요할까요? * "아무런 차이가없는 차이점은 아무런 차이가 없습니다."* – gnovice

+2

@gnovice : # 2 "잊어 버렸습니다"라고 입력하면 대신 1의 반환 값을 넣었을 것입니다. –

+0

값 1은 일반적으로 오류 또는 비정상 종료를 나타냅니다. OP는 구체적으로 'return 0'대 'return 0'(즉, 성공적인 반환)을 묻습니다. 오류를 처리하는 것을 잊어 버리는 것은 별개의 문제입니다. 만약 명시적인'return 0'이없는 코드를 본다면, 나는 그들이 "오류에 대해 완전히 잊었다"고 즉시 생각하지 않을 것입니다. – gnovice

4
  • 다른 프로그래머에게도 return 문을 입력하는 것을 잊지 않았 음을 분명히합니다.

  • 일부 컴파일러는 아무 것도 반환하지 않으면 경고 메시지를 표시 할 수 있습니다.

  • 함수가 반환하는 것을 명시 적으로 표시합니다.

  • 많은 프로그래머는이 규칙에 대해 모른다.

+3

"어떤 컴파일러는 아무 것도 반환하지 않으면 경고 메시지를 낼 수 있습니다." 컴파일러가 잘못되었으므로이 경우 올바른 것입니다. – AraK

+3

@AraK : 대부분의 컴파일러 경고는 올바른 코드에서 발생할 수 있습니다. – interjay

+2

당신이 옳고 컴파일러가 잘못 되었다면 정말로 중요합니까? 대부분의 경우 컴파일러 경고는 "기술적으로"옳다고해도 받아 들일 수 없습니다. 특히 컴파일러 경고가 좋은 표시이기 때문에 컴파일러는 암시 적 반환 0을 준수하지 않습니다. – SoapBox

4

오해. 단순히 이유가 없으며 누군가가 return 0;을 추가한다는 것을 모르는 경우.

3

일부 사람들은 모르기 때문에. 반드시 코드를 작성한 사람 (물론 가능하지만)은 아니지만 일부 사람들이 있습니다. 명시 적으로 return 0;을 쓰는 것이 좋습니다.

또한 관습에 따라 언어를보다 균일하게 만들어 주며, 최소한 예술적으로 중요합니다.

4

코드이 표준을 준수하기 때문에 코드가 호환되는 컴파일러을 통해 실행될 것이라고 말하는 사람은 누구입니까? 믿거 나 말거나, 사람들은 GCC와 Visual C++의 최근 버전 외에 컴파일러를 사용합니다.

물론 다른 사람들이 언급 한 의도가 있습니다.

+1

컴파일러없이 컴파일되지 않는다는 것을 알고 있습니까? – GManNickG

+2

아니요, 그렇지만 현재 사용중인 모든 컴파일러를 테스트하지 않았습니다. –

+7

어, 컴파일러가 문제를 일으키면 컴파일러를 버릴 시간입니다. – GManNickG

0

저는 종종 직선 C를위한 코드를 컴파일하기 때문에 자주합니다. 따라서 버릇이 없거나 내가 만든 코드 조각이 main()에서 왔기 때문에 명시 적으로 반환됩니다. 제거 할 이유가 없으므로 대개 그대로 유지됩니다.

그런 다음 다시 입력 할 필요가 없을 때가 있습니다 (어쩌면 내가 필요로하지 않는다는 것을 깨달았거나) 다른 스 니펫을 사용했을 수도 있습니다.

관련 문제