有时候我会看到程序员使用:
void *ptr = <something>;
if (ptr == NULL)
<do something>;
而不是:
void *ptr = <something>;
if (!ptr)
<do something>;
if (!ptr)
有什么问题可以解决,还是仅仅是编码风格偏好?
答案 0 :(得分:5)
在C中,它只是一种编码风格偏好。
有些人更喜欢if (NULL == ptr)
这样的论点,即如果程序员输错了(并将==
错误输入为单 =
),编译器会抱怨。但是,许多编译器会针对if (ptr=NULL)
发出警告(至少最近GCC会发出警告,当您调用gcc -Wall -Wextra
时应该这样做。
在C ++中(您将使用nullptr
而不是NULL
)可能会有所不同,因为可以重新定义operator !
(例如,在智能指针上)。但是,在原始普通指针(如void*
或sometype*
或SomeClass*
)上,您无法重新定义!
或!=
等运算符。
NULL
个指针,它们不是一个全零位机器字(但编译器应该处理这个问题)。我不能说今天广泛使用的任何这样的处理器(但是考虑到80年代分段16位x86作为反例)。