Search
Duplicate
🌸

[시시비비] 널포인터(null pointer)가 인자로 들어오는 경우에 대한 시시비비

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
Scrap
태그
null pointer
예외처리
9 more properties

널포인터가 인자로 들어오는 경우에 대해 당신은 어떤 코딩을 했나요?

대비해 별도의 처리를 했네요?
대비해 별도의 처리를 않았네요?
그렇게 하신 이유는 무엇인가요?
배경
1) 코드 작성이나 코드 평가 과정에서 null pointer 가 인자로 들어오는 경우에 대한 시시비비가 종종 관찰됐다. (아래는 null pointer가 인자로 들어오는 경우에 대해 들었던 여러 다른 생각들의 예다.)
생각 ⓪ : 그냥 무엇도 하지 않는다.
생각 ① : return (NULL); 로 종료시킨다.
생각 ② : 에러로 터뜨린다.
생각 ③ : 인자 둘 중에 하나만 null pointer면 그냥 함수를 정상 작동시킨다.
2) 과제 공통 가이드라인(Common Instructions)에서 아래의 문장을 확인했다.
“네가 만든 함수는 undefined behavior(segmetation fault, bus error, double free, etc)를 제외하고 예기치 못하게 종료해서는 안 된다. 네가 만든 함수가 undefined behavior도 아닌데 예기치 못한 종료를 하면 빵점이다.“
의문
Q : null pointer가 함수의 인자로 들어오는 경우는 undefined behaviors인가 아닌가?
널포인터가 undefined behaviors 라면
: null pointer 가 함수의 인자로 들어와도 함수는 예상치 못하게 종료되어도 괜찮다.
널포인터가 undefined behaviors가 아니라면
: null pointer 가 함수의 인자로 들어와서 예상치 못하게 종료되지 않도록 예외처리 해야한다.
탐구
C표준에 따르면 null pointer를 유효하지 않은 값(invalid value)으로, 그로 인한 결과를 undefined bevavior로 정의하고 있다.
결론
C표준에서 null pointer가 인자로 들어오는 경우 null pointer를 invalid value로 분류하고, invalid value를 인자로 받아 작동한 함수의 행동은 undefined behavior로 규정하고 있다.
과제의 Common Instruction 에 따르면 undefined behavior의 경우 예상치 못하게 함수가 종료되는 것을 허용한다.
따라서 우리의 함수는 null pointer가 인자로 들어오는 경우에 대해 별도의 처리를 하든, 하지 않든 둘 다 괜찮다. (빵점 처리 되지 않는다)
첨언
위 결론은 과제 수행에 한정해야한다.
과제를 벗어나 사이드 프로젝트나 현업에서는 프로그램의 운영의 묘, 개발자의 가치관에 따라 null pointer가 인자로 들어오는 경우에 대해 별도 처리를 하는 것에 대해 상황별 논의가 수반되어야 할 것이다.