포인터에 NULL이랑 0 둘 중 뭘 쓰나요?
조회수 3405회
초기 C++에는 NULL
을 쓸 수 없고, 무조건 void*
형만 할당 가능해서 (void*)0
같이 썼었는데 요즘은 포인터에 NULL
을 할당하는 게 가능해진걸로 알고 있습니다.
저는 주로 (void*)0
을 쓰는데 제 친구들은 NULL
을 더 많이 쓰는 것 같아요. 근데 NULL
의 장점을 모르겠어요
(void*)0
을 쓰면
if (p && !q)
do_something();
이런 코드는 p
가 0이니까 true
/false
로 쓰는게 말이 되는데,
NULL
은 0인지 아닌지 모르니까 p && !q
같이 못 쓰고 NULL
이랑 비교해야 하는 것 아닌가요
0이랑 NULL
의 차이는 뭐죠? 그냥 쓰고 싶은 대로 쓰는 건가요?
1 답변
-
cppreference.com을 보면
macro NULL
은 컴파일러 버전에 따라- C++11미만 : int 0으로 평가되는 상수 표현
rvalue
- C++11이상 : 정수 리터럴 0, 혹은
std::nullptr_t
타입인prvalue
으로 나뉩니다.
어떤 컴파일러던
NULL
은 0으로 평가될 수 있기 때문에 질문하신 것 중p && !q
같이 써도 아무런 문제가 없습니다.사실 0과
NULL
은 그냥 어떻게 코드를 쓰느냐의 차이일 뿐이기 때문에 어떤 걸 써도 무관하지만,NULL
을 쓰는 게 사용자의 의도를 드러내기 때문에 좀 더 많이 쓰이는 추세입니다.C++11부터는
std::nullptr_t
을 쓸 수도 있습니다. - C++11미만 : int 0으로 평가되는 상수 표현
댓글 입력