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条件下两个字符串比较的优化代码的主要内容,如果未能解决你的问题,请参考以下文章