【问题标题】:Efficient way of checking pointer for NULL in C在C中检查NULL指针的有效方法
【发布时间】:2013-08-03 10:22:33
【问题描述】:

如果此检查存在于快速代码路径中的函数内部,则检查指针是否为 NULL 的最有效方法是什么?

【问题讨论】:

  • if (ptr == NULL)
  • if (ptr) 在我看来更好,更高效,因为它节省了打字时间。
  • if (p == NULL)if (p == 0)if (!p) 无论如何都会在任何合理的编译器上生成相同的代码。选择您喜欢的外观。
  • @H2CO3 将 rValue 与 lValue 进行比较可防止意外分配,因为如果 == 运算符中缺少一个 =,则会产生编译时错误,否则会导致无限循环;)
  • @SanyamGoel 我发现p == NULL 更易于阅读,我使用-Wall -Wextra 进行编译。我认为绝地比较对我没有任何意义:)

标签: c


【解决方案1】:

有理由期​​待同样效率

if (!p)
if (p == NULL)
if (p == 0)
if (NULL == p)  // Jedi comparison
if (0 == p)     // Jedi comparison

在任何合理的编译器上编译成相同的代码。信用:@Will。

== 是有意的时,绝地比较确实抓住了=(图片来源:@Sanyam Goel)
我和其他人发现通常的if(p == ...) 更容易阅读。 (来源:@H2CO3)
在我的书中,维护胜过开发。出于这个原因,我倾向于支持if (p == NULL),因为它最清楚地表达了,恕我直言,正在测试什么。


虽然这个问题非常基础,但我认为它应该得到一个完整的答案。但值得称赞的是上面的精彩讨论。可能大多数程序员都会在某个时候思考这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多