if条件下两个字符串比较的优化代码

Posted

技术标签:

【中文标题】if条件下两个字符串比较的优化代码【英文标题】:Optimized code for two string compare in if condition 【发布时间】:2016-04-19 07:51:55 【问题描述】:

我想做两个字符串比较并使用两个不同的 if 条件。有没有更好的方法在一个 if 条件下进行字符串比较

if (strcmp(Buff1(), Config1) == 0)
 
    if (strcmp(Buff2, Config2) == 0)
    
      // my code goes here
    

【问题讨论】:

是的。使用&& 运算符。 @hacks,没有区别。不会保存任何汇编指令。 Buff1 是一个函数,Buff2 是一个字符串? 不要在 C++ 中使用 char*strcmp,除非你真的知道为什么必须使用它们。否则,删除 C++ 标记。 不相关,但有一个名为 Buff1 的变量和一个名为 Buff2 的函数是个坏主意。 【参考方案1】:

等效代码为:

if ((strcmp(Buff1(), Config1) == 0)) &&
    (strcmp(Buff2, Config2) == 0))

    // my code goes here

注意:编译器应该为两个代码示例生成相同的机器代码。区别在于外观,主要针对代码的读者。

添加else 子句后确实会有所不同:

if (strcmp(Buff1(), Config1) == 0)
 
    if (strcmp(Buff2, Config2) == 0)
    
      // my code goes here
    
    else 
    
        // else 1
    

else 

    // else 2

相比:

if ((strcmp(Buff1(), Config1) == 0)) &&
    (strcmp(Buff2, Config2) == 0))

    // my code goes here

else 

    // Single else clause

【讨论】:

【参考方案2】:

除了 Klas 的答案(以防万一您不熟悉 AND 运算符)- AND 运算符 ('&&') 检查第一个条件并继续检查第二个条件 - 仅当 - 第一个条件是真的。 因此,在您的具体问题中,它会检查前一对字符串是否相等,并且仅当为真(相等)时,它才会检查第二对字符串是否也相等。

【讨论】:

【参考方案3】:

如果您对这些字符串有所了解,显而易见的优化(尚未提及)是首先执行比较可能失败的比较。

【讨论】:

以上是关于if条件下两个字符串比较的优化代码的主要内容,如果未能解决你的问题,请参考以下文章

比较条件跳转指令

PL/SQL中If条件中的字符串比较

shell选择结构(if)

比较两个字符串值[关闭]

Shell脚本 文本测试整数值比较字符串比较 条件测试操作 if语句应用实例

【php】同一字符串,多个条件,如何高效的匹配?