比较运算符的顺序有差异吗?if(CONST ==变量)或if(变量== CONST)有什么区别?
#define CONST_VALUE 5
int variable;
...
if (variable == CONST_VALUE) // Method 1
...
OR
if (CONST_VALUE == variable) // Method 2
...
这是简单的偏好问题还是有一个特定的比较订单令人信服的理由?
比较运算符的顺序有差异吗?if(CONST ==变量)或if(变量== CONST)有什么区别?
#define CONST_VALUE 5
int variable;
...
if (variable == CONST_VALUE) // Method 1
...
OR
if (CONST_VALUE == variable) // Method 2
...
这是简单的偏好问题还是有一个特定的比较订单令人信服的理由?
有些人使用方法2的原因是,如果您错误地输入a =来代替==,那么您会得到编译器错误。然而,你会有人(像我一样)仍然会使用方法1,因为他们发现它更具可读性,如果出现错误,它将在测试过程中被检测到(或者在某些情况下,代码)。
告诉我,你有没有犯过这样的错误,以这种方式编写它会陷入困境?我把它写成“方法1”,因为它更具可读性,并且我敢肯定,在编写C和C类语言的25年中,我从未*写过=而不是==。 – 2009-10-26 18:48:24
它发生在我身上。考虑你自己的幸运。 – 2009-10-26 18:50:24
@ Paul Tomblin:多年来至少有三次,我已经在if(或while)语句中进行了一项任务,并且在进行比较的时候已经确定了长期存在的错误。也就是说,我还应该指出,如果某个编译器(特别是gcc)包含* only *一个赋值(无比较),那么它会/将发出警告,除非包含在一组额外的括号内。尽管如此,首先保证与所有编译器一起工作。 – 2009-10-26 18:54:35
唯一的区别是,(CONST_VALUE ==变量)使得共用错字(CONST_VALUE =可变)不可能进行编译。
相比之下,如果(变量= CONST_VALUE)将导致编译器想你的意思是分配给CONST_VALUE“变量”。
的=/==混乱是错误的在C很常见的来源,这就是为什么人们都试图解决这个问题用编码约定。
当然,如果您比较两个变量,这并不会节省您的时间。
而且这个问题似乎是How to check for equals? (0 == i) or (i == 0)
重复,这里的一些详细信息:http://cwe.mitre.org/data/definitions/481.html
正如其他人所提到的,CONST_VALUE ==变量避免错字=。
我还是做了“可变== CONST_VALUE”,因为我觉得它更具可读性,当我看到这样的:
if(false == somevariable)
我的血压上升。
的第一变型
if (variable == CONST_VALUE)
是较好的,因为它是更具有可读性。它遵循变化最大的价值第一的约定(也用于数学)。
第二个变量
if (CONST_VALUE == variable)
被一些人以防止平等与分配
if (CONST_VALUE = variable)
有更好的方法来实现,例如启用和采取谨慎检查的mixup的编译器警告。
其他人已经指出了原因。 =/==混乱。我更喜欢第一个版本,因为它更接近思考过程。一些编译器缓解混乱=和==给予警告,当它遇到类似
if(a=b)
在这种情况下,如果你真正想做的事你不得不写分配
if((a=b))
我会这样写
if((a=b) != 0)
为了避免混淆。
这就是说,我们在我们的代码中有1个案例,其中我们有一个=/==混淆,反过来写它不会有帮助,因为它是增值税之间的比较。
在GCC中,该选项是-Wparentheses – Adisak 2009-10-27 01:37:13
请参阅http://stackoverflow.com/questions/283205/what-was-the-most-dangerous-programming-mistake-you-have-made-in-c/283212#283212 – 2009-10-26 19:45:25
相关:[https:///en.wikipedia.org/wiki/Yoda_conditions](https://en.wikipedia.org/wiki/Yoda_conditions) – Boann 2013-11-26 19:12:03