有时我看到程序员使用:
void *ptr = <something>;
if (ptr == NULL)
<do something>;
Run Code Online (Sandbox Code Playgroud)
代替:
void *ptr = <something>;
if (!ptr)
<do something>;
Run Code Online (Sandbox Code Playgroud)
有什么可以出错if (!ptr),或者只是一种编码风格偏好?
在C中,它只是一种编码风格偏好.
有些人喜欢if (NULL == ptr)用的说法是,如果程序员出现了拼写错误(和错误地输入了== 作为一个单一的 =),编译器会抱怨.但是,许多编译器会发出警告if (ptr=NULL)(至少是最近的GCC,当gcc -Wall -Wextra你应该调用时).
在C++中(您将使用nullptr而不是NULL),可能会有区别,因为可以重新定义operator !(例如,在智能指针上).但是,在原始普通指针(如void*或,sometype*或SomeClass*)上,您无法重新定义像!或等运算符!=.
顺便说一句,一些奇怪的处理器可能有NULL指针,这些指针不是一个全零位机器字(但编译器应该处理这个问题).我不能说今天广泛使用的任何这样的处理器(但是考虑到80年代分段16位x86作为反例).