否定不等于NULL的不等于否定?

时间:2017-03-10 09:47:24

标签: c null

This OpenSSL示例包含如下代码:

const SSL_METHOD* method = SSLv23_method();
if(!(NULL != method)) handleFailure();

这是非NULL检查与以下不同吗?

if(!method) handleFailure();

我可以看到他们的方式的唯一原因是它可以更接近语义:"它应该不是-NULL(NULL != method),但是如果那样& #39;不是这种情况(!),那么我们应该处理失败。"

1 个答案:

答案 0 :(得分:2)

NULL保证是空指针常量。不要与空指针混淆(理论上它可能具有非零表示)。空指针常量可以定义为(void*)00

!(void*)0!0都会给出值1,因此可以保证任一版本都有效。

但是,在指针操作数上使用逻辑运算符被认为是不好的做法。与NULL的明确比较使得程序员的意图更加清晰 - 它是一种自我记录的代码,因此是一种很好的实践。