포인터에 NULL이랑 0 둘 중 뭘 쓰나요?


초기 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의 차이는 뭐죠? 그냥 쓰고 싶은 대로 쓰는 건가요?

  • 2016년 01월 25일에 작성됨

조회수 265


1 답변


좋아요
0
싫어요
채택취소하기

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을 쓸 수도 있습니다.

  • 2016년 01월 25일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close