2012-06-18 6 views
1

사용자 정의 함수를 작성할 때 함수가 성공했거나 0이 아닌 값을 반환하면 0을 반환해야합니까?코딩 패러다임 : 함수가 성공하면 0을 반환해야합니까?

내 기능이 성공적으로 수행되면 개인적으로 0을 반환하지만, 항상 (!var)과 같은 오류 처리가 표시되고 (var != NULL)처럼 표시되지 않습니다. 따라서 부울이 아닌 상황에서도 TRUE으로 알려진 1과 같은 값을 반환하는 것이 더 좋을까요?

스택 오버플로는 무엇을 제안합니까? 내가 WINAPI BOOL CreateProcessW에 대한 부울이 아닌 래퍼를 작성하고 내가 래퍼에서 returning 0 때문에 떨어져 내 코드를 던졌다 때문에 부탁 해요 이유

이유는 내가 TRUE 경우 확인되기 전에. 훨씬 더 명확한 의도에서입니다

int result = foo() 
if (!result) { .. } 

:

+3

이 질문은 본질적으로 주관적이라고 생각합니다. 나는 당신이 작업하고있는 프로젝트의 나머지 부분에서 어떤 컨벤션을 사용하고 있는지 제안 할 것입니다. – templatetypedef

+0

투표 종료; 매우 주관적입니다. –

답변

1

은 그때 당신이 뭔가처럼 말할 수 있기 때문에 쉽게 성공이 아닌 0을 반환하는 찾을 수 있습니다. 예외적 또는 오류의 경우 NULL이 반환되는 경우가 많으므로 성공시 NULL을 반환하는 것은 반 직관적입니다.

그러나 더 나은 해결책은 모든 오류 코드에 대해 열거 형을 사용하고 해당 오류를 확인하고 !result과 같은 것을 사용하지 않는 것입니다. 이렇게하면 여러 오류 코드가있는 경우에도 처리 할 수 ​​있습니다.

+1

오류가있을 때 반환 할 수있는 것이 모두 'NULL'이면 정의한 함수에서 더 정확한 오류 처리를 어떻게 추가하겠습니까? – user1450236

+0

@ user1450236 할 수는 없으므로 항상 그렇게 할 수는 없습니다. 오류 코드 (0)가 하나 뿐인 경우에만이 작업을 수행해야합니다. 다른 경우 성공하면 0을 반환 할 수 있습니다. 이렇게하면 가능할 때마다 "깨끗한"코드를 작성합니다. 모든 리턴 코드가 무엇인지 문서에서 분명하게 확인하십시오. – Oleksi

0

나는 하나를 고르고 일관성있게 말하고 싶습니다. 중요한 응용 프로그램과 함께 작업하는 경우 해당 코드와 일관성을 유지하십시오.

저는 성공시 0을 반환하고 다른 오류 조건에 0이 아닌 숫자를 사용하는 것을 좋아합니다. 오류를 0으로 사용하면보다 복잡한 오류 처리를하지 않고도 한 가지 종류의 오류 만 반환 할 수 있습니다. 그러나! foo()를 확인하는 것은 직관적이지 않은 것처럼 보일 수 있습니다.

0

이것은 실제로 주관적인 질문이지만 일반적으로 enum'd 오류 코드를 반환하고 명시 적으로 기대하는 조건을 확인하는 것이 좋습니다. 이렇게하면 자신을 발견 한 상황을 피할 수 있습니다.

일관성은 어느 한 구성표보다 더 중요합니다.

관련 문제