为什么Mozilla开发者指南更喜欢(ptr)over if(ptr!= nsnull)?

时间:2012-09-25 10:30:28

标签: c++ coding-style

Mozilla Developer Style Guide C / C ++实践 下,可以找到,

  

测试指针时,使用(!myPtr)或(myPtr);不要使用myPtr!= nsnull或myPtr == nsnull。

这背后有原因吗?或者只是一个惯例?

4 个答案:

答案 0 :(得分:2)

一般而言,公司编码指南就是这样 - 预计将在该公司内部执行的准则。

这是一个偏好问题 - 它们都实现了同样的事情(假设myPtr是指针*),所以它纯粹是主观的。对于大型代码库,在一半的位置看到if (myPtr)而在另一半看到if (myPtr != NULL)会很烦人。

*如果myPtr是非指针用户定义的类型,它可以重载运算符!!===,这样它们实际上可能会表现出来不同

答案 1 :(得分:1)

如果你这样做,就有可能犯一个很难找到的印刷错误

if (myPtr = nsnull) /* assignment operator */

虽然你真的是这个意思

if (myPtr == nsnull) /* test equality */

答案 2 :(得分:0)

  

这背后有原因吗?

存在公司编码指南,因为在大型公司中,通常会有人将审美一致性置于其他编程问题之上。它们将产生大量毫无意义的指导原则,例如这一指南,虚假的理由是无关细节的一致性使代码更具可读性。如果企业环境功能失调,这些指导方针将被载入官方政策文件并强加给所有开发人员。

  

或者只是一个惯例?

在这种情况下,最好不要使用一些非常规符号,这些符号可能会或可能不会评估为空指针值;虽然大概nsnull被这种风格指南定义并强制要求使用,因此内部人员会明白这一含义。 if (ptr)是否比更传统的if (ptr != 0)(或NULLnullptr更好)是一个品味问题:有些人会因为他们的选择而战斗圣战,其他人会赢得'关心。

答案 3 :(得分:0)

样式指南推荐的样式有一个名称:boolean zen。这是布尔表达式的本质。练习boolean zen意味着以尽可能最简单的形式编写布尔表达式。例如,这不是布尔禅:

bool foo() {
    if(myCondition()) {
        return true;
    } else {
        return false;
    }
}

用布尔禅重写,你得到这个:

bool foo() {
    return myCondition();
}

我相信很容易看到第二个更令人满意,只是因为它没有添加不必要的代码结构。

现在,在C派生中,如果在布尔上下文中使用,每个整数/指针也有一个已定义的行为。手动进行转换毫无意义。 I. e。在C / C ++ / Objective-C中if语句

bool foo = ...;
if(foo) printf("It's true");
if(foo != false) printf("It's really true");

与行

等同
Bar* foo = ...;
if(foo) printf("It exists");
if(foo != 0) printf("It really exists");

所以,根据boolean zen,你应该坚持使用更简单的一种。

您可以在此slide-deck中找到boolean zen的介绍。