2012-12-06 3 views
-1

함수가 있다고 가정하고 인수의 유효성을 검사하려고합니다. 하지 인 NULL에 대한 예를 들어 :C 함수 인수의 저수준 유효성 확인

void* myFunction(char* str1, char* str2){ 
    if(str1==NULL || str2==NULL) return NULL; 
    ... 
} 

내 질문은 표준 C 라이브러리에 의해 이루어집니다처럼 좋은 낮은 수준 (API)를 검증이라고하는 것이다.

감사합니다.

+1

C 표준 라이브러리는 인수의 유효성을 보장하지 않습니다. 'strcpy (NULL, "abc");'는 아마도 충돌 할 것입니다. 이건 괜찮아. –

+0

어설 션()을 사용하지 않는 이유는 무엇입니까? – Mawg

답변

1

C는 너 자신과 아주 작은 안전 그물을 걸어 많은 로프로 언어를 얻는 것입니다. 애플의 예를 this implementation of strcpy을 위해 가지고 있지만, 그들은 모두 모두 아주 많이 볼 : C 예외의 개념을 모르는 것처럼

char *strcpy(char *s1, const char *s2) 
{ 
    char *s = s1; 
    while ((*s++ = *s2++) != 0) 
    ; 
    return (s1); 
} 

, 모든 오류 신호가 기능과 때때로의 반환 값을 통해 통해 수행되어야한다을 전역 변수 errno는 오류의 표현을 다소 제한합니다.

표준 라이브러리의 내용과 일치하도록하려면 안전을 거의 제공 할 필요가 없습니다.

+0

여러분의 예제에서 NULL의 유효성 검사는 기능 자체의 구현의 일부로 수행됩니다. – Sanich

+0

@Sanich 사실, 함수를 호출하는 코드 자체가 매개 변수의 정확성에 대한 책임이 있습니다. 라이브러리 함수는받은 값을 사용할 수 있다고 가정합니다. – fvu

0

중요한 것은 "당신이 말하는 것을하십시오"와 "당신이하는 것을 말합니다"입니다. "당신이하는 말"에 분명히 설명되어 있어야합니다. 설명은 문서에 있어야하지만 주석이나 함수 이름 또는 매개 변수 이름에있을 수도 있습니다.

요구 사항이 명시되어 있다면 실제로 해당 요구 사항을 충족하는지 확인하십시오. 트랩 할 오류 사례를 정의한 경우 호출자가 errno 또는 그 외의 방법을 사용하여이 오류를 확인할 수 있는지 확인하십시오.