代码之家  ›  专栏  ›  技术社区  ›  semaj

if(const==variable)或if(variable==const)之间的区别是什么?

c
  •  11
  • semaj  · 技术社区  · 15 年前

    比较运算符的顺序有区别吗?

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

    这是一个简单的偏好问题,还是有一个令人信服的原因来确定一个特定的比较顺序?

    5 回复  |  直到 15 年前
        1
  •  31
  •   Thomas Owens    15 年前

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

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

        2
  •  10
  •   Community CDub    8 年前

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

    相比之下,如果(variable=const_value),编译器会认为您打算将const_value分配给“variable”。

    =/==混淆是C中一个非常常见的bug源,这就是为什么人们试图用编码约定来解决这个问题。

    当然,如果你比较两个变量,这不会节省你的钱。

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

    以下是更多信息: http://cwe.mitre.org/data/definitions/481.html

        3
  •  3
  •   whatsisname    15 年前

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

    我仍然会做“variable==const_value”,因为我认为它更可读,当我看到如下内容时:

    if(false == somevariable)
    

    我的血压升高了。

        4
  •  2
  •   starblue    15 年前

    第一种变体

    if (variable == CONST_VALUE) 
    

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

    第二种变体

    if (CONST_VALUE == variable)
    

    被一些人用来防止平等检查与分配的混淆

    if (CONST_VALUE = variable)
    

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

        5
  •  1
  •   Patrick Schlüter    15 年前

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

    if(a=b)
    

    在这种情况下,如果你真的想做任务,你就不得不写

    if((a=b)) 
    

    我会把它写成

    if( (a=b) != 0) 
    

    以避免混淆。

    这就是说,在代码1的情况下,我们有一个=/==混淆,而用另一种方式编写它将不会有帮助,因为它是vars之间的比较。