이것부터 시작하겠습니다 : 일관성이 중요합니다. 코드 기반의 일관성보다 결정이 덜 중요합니다.
C ++에서
C ++에서 NULL은 0 또는 0L로 정의됩니다.
당신이 읽은 경우 언어 프로그래밍은 C ++ 사용하여 제안 비얀 스트로브 스트 룹을 0
방지하기 위해 명시 적으로 NULL
임무를 수행 할 때 매크로를 그가 비교와 동일 한 경우에, 잘 모르겠어요 내가 책을 읽을 수 있기 때문에, 나는 그가 단지했다고 생각하지만, 그것은을이었다 if(some_ptr)
명백한 비교가 없지만 나는 그것에 모호합니다.
그 이유는 NULL
매크로가 (거의 모든 매크로와 마찬가지로) 기만적이기 때문에 실제로 0
문자 그대로이며 이름에서 알 수 있듯이 고유 한 유형이 아닙니다. 매크로를 피하는 것은 C ++의 일반적인 지침 중 하나입니다. 반면에 0
정수처럼 보이며 포인터와 비교하거나 포인터에 할당 할 때는 그렇지 않습니다. 개인적으로 나는 어느 쪽이든 갈 수 있지만 일반적으로 나는 명백한 비교를 건너 뜁니다 (어떤 사람들은 이것을 싫어하기 때문에 아마도 변경 사항을 제안하는 기고자가있는 것입니다).
개인적인 감정에 관계없이 이것은 올바른 방법이 없기 때문에 가장 악한 선택입니다.
이것은 명확하고 일반적인 관용구이며 선호합니다. 비교 중에 실수로 값을 할당 할 가능성이 없으며 명확하게 읽습니다.
if(some_ptr){;}
이것이 some_ptr
포인터 유형 이라는 것을 알면 분명 하지만 정수 비교처럼 보일 수도 있습니다.
if(some_ptr != 0){;}
이것은 명백한 일이며, 일반적인 경우에 의미 NULL
가 0
있습니다.
if(some_ptr != NULL){;}
C ++ 0x에는 명시적이고 정확하기 때문에 선호되는 방법 인 nullptr이 있습니다. 우연한 할당에주의하십시오.
if(some_ptr != nullptr){;}
C ++ 0x로 마이그레이션 할 때까지 사용하는 방법 중 하나를 걱정하는 데 시간 낭비라고 주장 할 수 있습니다. 완전히 전달 된 일반적인 프로그래밍 문제와 함께 nullptr이 발명 된 이유는 모두 충분하지 않습니다 .) 가장 중요한 것은 일관성을 유지하는 것입니다.
C에서
C는 다른 짐승입니다.
C NULL에서 0 또는 ((void *) 0)으로 정의 될 수있는 C99는 구현 정의 널 포인터 상수를 허용합니다. 따라서 실제로 구현의 NULL 정의로 귀결되며 표준 라이브러리에서 검사해야합니다.
매크로는 매우 일반적이며 일반적으로 언어 및 기타 사항에서 일반 프로그래밍 지원의 결함을 보완하기 위해 많이 사용됩니다. 언어는 훨씬 단순하고 전처리기에 더 많이 의존합니다.
이 관점 NULL
에서 C 에서 매크로 정의를 사용하는 것이 좋습니다 .