This OpenSSL示例包含如下代码:
const SSL_METHOD* method = SSLv23_method();
if(!(NULL != method)) handleFailure();
这是非NULL检查与以下不同吗?
if(!method) handleFailure();
我可以看到他们的方式的唯一原因是它可以更接近语义:"它应该不是-NULL(NULL != method
),但是如果那样& #39;不是这种情况(!
),那么我们应该处理失败。"
答案 0 :(得分:2)
NULL
保证是空指针常量。不要与空指针混淆(理论上它可能具有非零表示)。空指针常量可以定义为(void*)0
或0
。
!(void*)0
和!0
都会给出值1
,因此可以保证任一版本都有效。
但是,在指针操作数上使用逻辑运算符被认为是不好的做法。与NULL
的明确比较使得程序员的意图更加清晰 - 它是一种自我记录的代码,因此是一种很好的实践。