使用if(...)时,为什么这被认为是一个很好的编程习惯?

时间:2012-09-24 09:02:02

标签: c++ c programming-languages

  

可能重复:
  How to check for equals? (0 == i) or (i == 0)
  Is there a difference between i==0 and 0==i?

我见过很多次人们使用if(condition)作为if(0==x)代替if(x==0)。它被认为是一种很好的做法,但有人可以解释为什么这样做?它有什么不同?相反,它在我看来降低了可读性。

5 个答案:

答案 0 :(得分:10)

它降低可读性的事实纯粹是主观的。 (我也有同样的感觉,但那是因为我一直在处理x==0而不是相反,所以我习惯了。)

这样做是为了防止意外分配:

if(0=x)

将产生编译器错误,

if(x=0)

不会。

答案 1 :(得分:2)

就个人而言,我不喜欢这种做法。但由于以下原因,它变得很受欢迎:

区分assignment operator和布尔条件。

if(x = 0)

这条线有两个purpsose:

  1. 将0分配给x。
  2. 使条件为false,因为它等同于if(0)
  3. 为了避免这些错误,有些人更喜欢if(0 = x),这会导致编译时错误。

答案 2 :(得分:1)

只需输入if (a = 0)而不是if (a == 0),就可以避免输入错误。如果您使用if (0 = a)而不是if (0 == a),则使用Yoda样式会出现编译错误。

另一方面,它不会阻止if (b = a)b是另一个变量的情况。没有银弹。

最好在编译时使用-Wall -Wextra。如果您想要偏执,请添加-Werror并将所有警告视为错误(最好这样做)

答案 3 :(得分:0)

是的,它的可读性较低(imho),但这可以避免使用assign而不是检查==

时常见的错误
if( 0 = variable ) { // Fail 0 is constant
有趣的事实:有人称之为“尤达条件”

答案 4 :(得分:0)

不,只是习惯于读取左边的变量名和右边的常量。 但实际上它会给你确切的代码,如果你离开

if(0 = x)

而不是

如果(0 == x)的 如果错误,那么它会抛出一个你可以轻易修改的错误,但如果反过来又很难调试