if(CONST == variable)或if(variable == CONST)之间有什么区别?

时间:2009-10-26 18:40:53

标签: c

比较运算符的顺序是否存在差异?

#define CONST_VALUE 5

int variable;

...

if ( variable == CONST_VALUE )   // Method 1
...

OR

if ( CONST_VALUE == variable )   // Method 2
...

这仅仅是一个偏好问题还是有特定比较顺序的令人信服的理由?

5 个答案:

答案 0 :(得分:31)

有些人使用方法2的原因是因为如果你错误地输入a =代替==,你将会遇到编译器错误。

然而,你会有人(像我一样)仍然会使用方法1,因为他们发现它更具可读性,如果有错误,它将在测试期间被检测到(或者,在某些情况下,静态分析码)。

答案 1 :(得分:10)

唯一的区别是(CONST_VALUE == variable)使公共拼写错误(CONST_VALUE = variable)无法编译。

相比之下,如果(variable = CONST_VALUE)将导致编译器认为您打算将CONST_VALUE指定给'variable'。

= / ==混淆是C中常见的错误来源,这就是人们试图解决编码约定问题的原因。

当然,如果您要比较两个变量,这将无法拯救您。

问题似乎与How to check for equals? (0 == i) or (i == 0)

重复

这里有更多信息:http://cwe.mitre.org/data/definitions/481.html

答案 2 :(得分:3)

正如其他人提到的,CONST_VALUE == variable避免了= typo。

我仍然做“变量== CONST_VALUE”,因为我觉得它更具可读性,当我看到类似的东西时:

if(false == somevariable)

我的血压升高了。

答案 3 :(得分:2)

第一个变种

if (variable == CONST_VALUE) 

更好,因为它更具可读性。它遵循惯例(也用于数学),变化最大的值首先出现。

第二个变种

if (CONST_VALUE == variable)
某些人使用

来防止将等同性检查与赋值混合

if (CONST_VALUE = variable)

有更好的方法可以实现这一目标,例如启用和注意编译器警告。

答案 4 :(得分:1)

其他人已经指出了原因。 = / ==混乱。我更喜欢第一个版本,因为它更接近思考过程。有些编译器通过在遇到类似

之类的内容时发出警告来减轻=和==的混淆
if(a=b)

在这种情况下,如果您真的想要进行分配,则必须编写

if((a=b)) 

我将其写为

if( (a=b) != 0) 

避免混淆。

这就是说,我们在我们的代码中有一个案例,我们有一个= / ==混淆并以相反的方式写它不会没有帮助,因为它是变量之间的比较。