此openssl示例包含这样的代码:
const SSL_METHOD* method = SSLv23_method();
if(!(NULL != method)) handleFailure();
此非零检查是否与以下内容不同?
if(!method) handleFailure();
我能看到他们的方式的唯一原因是它可能更接近语义:" 应该不是无效的(NULL != method
),但是如果不是这样(!
)然后我们应该处理失败。"
NULL
可以保证为 null指针常数。不要将其与 null指针混淆(从理论上讲,这可能具有非零表示形式)。空指针常数可以定义为(void*)0
或0
。
!(void*)0
和 !0
都给出值 1
,因此保证任何一个版本可以正常工作。
但是,在指针操作数上使用逻辑运算符被认为是糟糕的实践。与NULL
的明确比较使程序员的意图更加清晰 - 这是一种自我记录代码的形式,因此是一个很好的做法。