불행히도, 원형은 같은 유혀의 두 개의 인수를 교환할 때는 호출 버그를 알려주지 않는다. 예를 들어, memchr 함수가 다음과 같은 원형을 갖는다면,
void * memchr(const void *pv, int ch, int size);
문자(char)와 크기(size) 인수를 교환할 수 있고 컴파일러는 경고를 내지 않을 것이다. 그러나 인터페이스와 원형에 보다 정확한 유형(type)을 사용함으로써, 원형이 제공하는 에러 검사 기능을 강화할 수 있다. 예를 들어, 아래와 같은 원형은 문자와 크기 인수를 바꿔 기입한다면, 버그에 대한 경고를 내보낼 것이다.
void * emmchr(const void *pv, unsigned char ch, size_t size);
보다 정확한 유형을 사용하는데 있어서의 단점은, 유형 불일치(type-mismatch) 경고가 나오지 않게 하기 위해 인수를 정확한 유형으로 자주 배정해야 한다는 것이다.
'c or linux' 카테고리의 다른 글
assert의 응용 (0) | 2005.03.09 |
---|---|
함수의 인수를 확인하기 위해 assertion을 사용한다 (0) | 2005.03.09 |
배열 포인터 (0) | 2005.03.09 |
void 형 포인터와 널 포인터 (0) | 2005.03.09 |
포인터의 포인터 (0) | 2005.03.09 |