比较运算符的顺序是否存在差异?
#define CONST_VALUE 5
int variable;
...
if ( variable == CONST_VALUE ) // Method 1
...
OR
if ( CONST_VALUE == variable ) // Method 2
...
这仅仅是一个偏好问题还是有特定比较顺序的令人信服的理由?
答案 0 :(得分:31)
有些人使用方法2的原因是因为如果你错误地输入a =代替==,你将会遇到编译器错误。
然而,你会有人(像我一样)仍然会使用方法1,因为他们发现它更具可读性,如果有错误,它将在测试期间被检测到(或者,在某些情况下,静态分析码)。
答案 1 :(得分:10)
唯一的区别是(CONST_VALUE == variable)使公共拼写错误(CONST_VALUE = variable)无法编译。
相比之下,如果(variable = CONST_VALUE)将导致编译器认为您打算将CONST_VALUE指定给'variable'。
= / ==混淆是C中常见的错误来源,这就是人们试图解决编码约定问题的原因。
当然,如果您要比较两个变量,这将无法拯救您。
重复答案 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)
避免混淆。
这就是说,我们在我们的代码中有一个案例,我们有一个= / ==混淆并以相反的方式写它不会没有帮助,因为它是变量之间的比较。