有时我看到程序员使用:
void *ptr = <something>;
if (ptr == NULL)
<do something>;
而不是:
void *ptr = <something>;
if (!ptr)
<do something>;
if (!ptr)
有什么可能出现的,还是仅仅是编码样式的偏好?
在C中,它只是一个编码样式的偏好。
有些人更喜欢if (NULL == ptr)
,其中有一个论点是,如果程序员制作错字(并且将==
误认为是A =
)编译器将抱怨。但是,许多编译器会发出if (ptr=NULL)
的警告(至少最近的GCC DO,当您应作为gcc -Wall -Wextra
调用时)。
在C 中(在其中使用nullptr
而不是NULL
)可能会有区别,因为可以重新定义operator !
(例如,在智能指针上)。但是,在Rain Plain指针(例如void*
,sometype*
或SomeClass*
)上,您不能重新定义诸如!
或!=
的操作员。
顺便说一句,一些怪异的处理器可能具有NULL
指针,而不是所有零位机器单词(但是编译器应该处理此问题)。我今天无法在广泛使用中命名任何这样的处理器(但是,认为1980年代的16位x86作为反示例)。