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

if(常量==变量)和if(变量==常量)之间有什么区别?

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

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

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

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

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

    然而,你会有一些人(像我一样)仍然会使用方法1,因为他们觉得它更可读,如果有错误,它将在测试过程中被检测到(或者在某些情况下,对代码进行静态分析)。

        2
  •  10
  •   Community Mohan Dere    9 年前

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

    相比之下,if(variable=CONST_VALUE)会导致编译器认为您打算将CONST_VALU分配给“variable”。

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

    How to check for equals? (0 == i) or (i == 0)

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

        3
  •  3
  •   whatsisname    16 年前

    我仍然使用“variable==CONST_VALUE”,因为我认为它更易读,当我看到类似以下内容时:

    if(false == somevariable)
    

    我的血压升高了。

        4
  •  2
  •   starblue    16 年前

    第一种变体

    if (variable == CONST_VALUE) 
    

    更好,因为它更易读。它遵循了一个惯例(也用于数学),即变化最大的值排在第一位。

    第二种变体

    if (CONST_VALUE == variable)
    

    某些人使用它来防止等式检查与赋值混淆

    if (CONST_VALUE = variable)
    

        5
  •  1
  •   Patrick Schlüter    16 年前

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

    if(a=b)
    

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

    if((a=b)) 
    

    那时我会写为

    if( (a=b) != 0) 
    

    以避免混淆。

    也就是说,在我们的代码1中,我们遇到了一个====混淆的情况,反过来写也没有帮助,因为这是var之间的比较。