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作为反例)。