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)
避免混淆。
这就是说,我们在我们的代码中有一个案例,我们有一个= / ==混淆并且反过来写它不会没有帮助,因为它是变量之间的比较。