当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《if(CONST==variable)或if(variable==CONST)之间有什么区别?》经验,为你挑选了2个好方法。

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

#define CONST_VALUE 5

int variable;

...

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

OR

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

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



1> Thomas Owens..:

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

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


告诉我,你有没有曾经犯过这样的错误,在这种情况下以这种方式写它会抓住它?我把它写成"方法1",因为它更具可读性,而且我非常确定我在编写C和C语言的25年中从未*写过=而不是==.
它过去发生在我身上.认为自己很幸运.
@Paul Tomblin:这些年来至少有三次我修复了长期存在的错误,因为在if(或while)语句中进行了比较.也就是说,我还应该指出,一些编译器(特别是gcc)可以/将发出警告,如果它只包含*一个赋值(无比较),除非包含在一组额外的括号中.尽管将所有的编译器放在首位,但保证最先使用.
Paul:不,我不是这样写的,因为我有信心如果我犯了一个=/==错误,我会在静态分析或测试期间找到它.然而,第一句话是那些用另一种方式写作的人的论点.
@Paul:我之前犯过一两次错误,但通常很容易被抓住.并且编译器警告是推理是愚蠢的,因为如果你记得使用`3 == var`那么你会记得检查拼写错误.
@Goat,GMan:不适合我.我按习惯写了常量左值表格,并认为它很少见,编译器不时地抓住了它.

2> Ori Pessach..:

唯一的区别是(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

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有