2010-02-07 3 views
4

현재 뭔가 잘못되면 C에서 내 사용자 지정 함수 -1 반환하고 성공 0입니다. 예를 들어, 연결된 목록 및 일부 함수로 작업하면 제대로 작동하려면 비어 있지 않은 목록이 필요합니다. 인수로 전달 된 목록이 비어 있으면 -1 (오류)을 반환하고 비어 있지 않고 함수가 문제없이 작동하면 0을 반환합니다.C의 함수에서 오류가 발생하면 어떻게해야합니까?

-1 대신 -1을 돌려 주시겠습니까?

C에서 일하는 표준 방법인가요? 아니면 다른 접근 방법을 권장합니까?

답변

8

실패를 나타내는 0 이외의 값을 반환합니다.

if(func_call()) 
{ 
    doErrorHandling(); 
} 

이 협약은 특정 오류를 나타 내기 위해 어떤 !0 값을 사용 할 수 있습니다, 이것은 당신이 균일 한 방식으로 하나 개의 변수를 사용할 수 있습니다 : 당신은 당신이 기능을 쓸 수있는이 방법은 너무 호출합니다. 따라서 위의 예에 표시된 if의 본문에는 특정 오류를 처리하기위한 switch 문이있을 수 있습니다.

당신은 다르게 할 수 있습니다.하지만 그렇게하기로 결정한다면, 유감스럽게도 win32 API (및 다른 API는 제가 사용했습니다)가 규칙을 섞고 일치시킵니다.

+0

특정 오류 코드가없는 경우 항상 bool을 반환 할 수 있습니다. –

+4

+1 ** 긍정적 인 ** 일 필요는 없지만 성공을 위해서는 0, 오류는! 0 만 있으면됩니다. 사실, 제 경험상 오류 코드가 부정적 일수록 더 흔합니다. –

+0

@ 스티브 (Steve) : 적절한 언어 나 환경에서는 C가 아닙니다. 0 = 성공은 C 문화에 너무 깊게 뿌리내어 져서 다른 것을하기에 정말로 좋은 * 이유가 필요합니다. –

-5

많은 계획이 있습니다.하지만 무엇을 하든지 일관되게하십시오!

많은 조건이없는 경우 오류 0을 사용하십시오. 오류 테스트는 간단한 방식으로 작성되어 있기 때문이다 :

if (!list_insert(...)) { handle_error; } 

그렇지 않으면 제로 이하 답변> = 0 당신은리스트의 길이와 같은 기능이 사용할 수있는 일반적인 답변과 함께 사용하는 것이 좋다 정상적인 상태에있는 것입니다 부정하지 않을 것. 또는 많은 오류 코드 (-1 - 존재하지 않음, -2 - 찾을 수 없음, -3 ..., ...)를 원하면

+1

오류로 0을 사용하지 마십시오. C는 0 = 성공,! 0 = 실패의 아주 강한 역사를 가지고 있습니다. Hassan Syed가 지적했듯이 Windows API 디자이너가이 사실을 인식하지 못하면 혼란이 없습니다. –

+0

어느 쪽이든 큰 문제가 보이지 않습니다. 0 == 실패를하는 프로젝트가 있고 0 == 성공을하는 다른 프로젝트가 있습니다. 문서화되어 있고 프로젝트 전체에서 동일한 컨벤션을 유지하는 한, "잘못된"방법이 없습니다. 필자가보기에 "list_insert가 아니라면 list_insert가 실패했다"는 의미입니다. 당신의 기능이 대부분의 시간을 실패 할 것으로 예상하지 않는다면 ... 또한 Hassan은 그들이 서로 다른 방법을 섞어서 (0 == 에러를 사용하는 것이 아니라) 혼합하고 기본적으로 내가 시작했던 똑같은 것을 말했다고 지적했다. 그것을 붙잡아 라. – viraptor

2

괜찮습니다. 양수 반환 값은 일반적으로 성공을 의미하고 처리 된 바이트 수이기 때문에 -1은 I/O 함수에서 사용됩니다. 함수가 잘못 될 수있는 여러 가지 방법이있는 경우 다른 정수를 반환하거나 오류 코드가 포함되도록 전역 오류 변수 (표준 라이브러리에서 errno가 사용됨)를 설정할 수 있습니다.

스타일 측면에서 볼 때, 내 기능이 (깨끗하게) 다른 것을 반환 할 수 없음을 의미하므로 상태 코드를 반환하지 않는 것이 좋습니다. 대신 함수를 호출하기 전에 입력을 확인합니다. 그러나 이것은 주관적이고 문맥에 달려 있습니다.

-1

난이도가 인 시점에서 정보가 풍부한 사람이 읽을 수있는 문자열 을 서식 지정하는 방법을 찾으면 모든 정보를 사용할 수 있으며 나머지 부분은 이해할 수 있도록 디자인하는 것이 좋습니다. 프로그램을 통해 사용자의 휴대 전화를 통해 개발 팀에게 분석을 요청하십시오.

더 나은 소프트웨어를 더 빨리 제작하고 싶다면이 기능이 어떤 디자인의 중요한 기능처럼 보입니다. 길에서의 살인 오류 정보는 주요 범죄이며 C 언어는 변명의 여지가 없습니다.

+0

최종 사용자 또는 개발자에게 누구에게 정보를 제공합니까 ??? 그리고 어떤 언어로 ??? –

+0

물론 개발자에게 충분한 정보를 제공합니다. 내 대답을 다시 읽으십시오. 언어 : 영어. 개발자는 영어를 이해해야합니다. 사용자/헬프 데스크는이를 팀에 전달할 수 있어야합니다. –