if(!ptr)VS if(ptr == NULL)在C中

时间:2017-09-01 13:47:28

标签: c pointers

有时候我会看到程序员使用:

void *ptr = <something>;
if (ptr == NULL)
    <do something>;

而不是:

void *ptr = <something>;
if (!ptr)
    <do something>;

if (!ptr)有什么问题可以解决,还是仅仅是编码风格偏好?

1 个答案:

答案 0 :(得分:5)

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

有些人更喜欢if (NULL == ptr)这样的论点,即如果程序员输错了(并将==错误输入为 =),编译器会抱怨。但是,许多编译器会针对if (ptr=NULL)发出警告(至少最近GCC会发出警告,当您调用gcc -Wall -Wextra时应该这样做。

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

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