为什么要使用if条件语句(0 == Indx) 而不是 (Indx == 0) —— 这两者有什么区别吗?

5

我有一个基础问题一直困扰着我,无法弄清楚为什么程序员要使用它。

if (0 == Indx)
{ 
    //do something
}

上面的代码做了什么,与下面的代码有何不同。
if (Indx == 0)
{
    // do something
}

我正在努力理解一些嵌入式系统的源代码。


2
http://c-faq.com/style/revtest.html - David Ranieri
1
这是Yoda符号 - nakano531
3
这被称为 Yoda 条件语句。在20世纪80年代,这种写法很有用,因为编译器如果你不小心写成 if (Indx = 0) 不会发出警告。现在,每个好的编译器都会给你警告,所以 Yoda 条件语句已经过时了。当然,像往常一样,旧观念永远不会消失,只有支持者会消失。 - user3386109
我的大脑扫描器比较快地扫描出 if(0<=some_long_call(arg0,arg1,arg2,subcall(subarg0,subarg1))),而不是 if(some_long_call(arg0,arg1,arg2,subcall(subarg0,subarg1))>=0)。我说的话像尤达一样,因为我习惯于优化毫秒级别的操作。 - Petr Skocik
1
可能是重复的问题,参考如何检查相等?(0 == i) 还是 (i == 0) - Salman A
1个回答

8

有些程序员更喜欢使用这个:

if (0 == Indx) 

由于这行代码

if (Indx == 0)

很容易因为编程错误(而不是比较符号)而编写成赋值语句。

if (Indx = 0) //assignment, not comparison.

在C语言中,这是完全有效的。

Indx = 0是一个返回0的表达式(也将0分配给Indx)。

正如此答案的评论中提到的那样,如果您在if语句内部有这样的赋值,大多数现代编译器都会向您显示警告。

您可以在这里阅读更多关于优点与缺点的信息。


2
这是那种永远不会消失的事情之一。现代编译器会为此发出警告。利用它。 - user3458
@Arkadiy,我从未表达过个人观点,我可能同意你的观点,也可能不同意。我只是试图回答这个问题,“我无法弄清楚为什么程序员会使用它?” - Cacho Santa
我也从未谈论过您的个人观点 :). 能否请您提及更现代的方法? - user3458
@Arkadiy,除非您使用/W4或/Wall,否则Visual Studio不会发出警告。 - Barmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接