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

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

#define CONST_VALUE 5 int variable; ... if ( variable == CONST_VALUE ) // Method 1 ... OR if ( CONST_VALUE == variable ) // Method 2 ... 

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

有些人使用方法2的原因是因为如果你输入a =而不是==,你会得到一个编译器错误。

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

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

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

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

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

这个问题似乎与如何检查等于重复? (0 == i)或(i == 0)

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

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

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

 if(false == somevariable) 

我的血压boost了。

第一个变种

 if (variable == CONST_VALUE) 

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

第二个变种

 if (CONST_VALUE == variable) 

有些人使用它来防止相等检查与赋值的混合

 if (CONST_VALUE = variable) 

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

其他人已经指出了原因。 = / ==混乱。 我更喜欢第一个版本,因为它更接近思考过程。 有些编译器通过在遇到类似事件时发出警告来减轻=和==的混淆

 if(a=b) 

在这种情况下,如果你真的想要进行分配,你就不得不写

 if((a=b)) 

然后我会写作

 if( (a=b) != 0) 

避免混淆。

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