if(!ptr)VS if(ptr == NULL)in C

有时我看到程序员使用:

void *ptr = ; if (ptr == NULL) ; 

代替:

 void *ptr = ; if (!ptr) ; 

有没有什么可以出错if (!ptr) ,还是仅仅是编码风格偏好?

在C中,它只是一种编码风格偏好。

有些人更喜欢if (NULL == ptr) ,如果程序员犯了一个拼写错误(并且错误输入==作为单个 = ),编译器会抱怨。 但是,许多编译器会发出if (ptr=NULL)的警告(至少是最近的GCC ,当你应该调用gcc -Wall -Wextra )。


在C ++中(你将使用nullptr而不是NULL )可能会有区别,因为可以重新定义operator ! (例如,在智能指针上)。 但是,在原始普通指针(如void* ,或sometype*SomeClass* )上,您无法重新定义运算符!!=


顺便说一句,一些奇怪的处理器可能有NULL指针,这些指针不是一个全零位机器字(但编译器应该处理这个问题)。 我不能说今天广泛使用的任何这样的处理器(但是考虑到80年代分段16位x86作为反例)。