C 差分法的循环优化

C 差分法的循环优化,c,optimization,compilation,decompiling,C,Optimization,Compilation,Decompiling,这两者在效率上有什么区别吗?第二个更优化吗?我编译了第一段代码,然后反编译,得到了第二段代码 for (i = 0; i < n; ++i) { if (a[i] == x) { printf("%d", a[i]); return 0; } } return 1; (i=0;i

这两者在效率上有什么区别吗?第二个更优化吗?我编译了第一段代码,然后反编译,得到了第二段代码

for (i = 0; i < n; ++i) {
    if (a[i] == x) {
        printf("%d", a[i]);
        return 0;
    }
}
return 1;
(i=0;i{ 如果(a[i]==x){ printf(“%d”,a[i]); 返回0; } } 返回1;
i=0;
而(1){

如果(n两个代码片段执行相同的操作。主要区别是第一个代码片段可读且易于理解,第二个代码片段模糊,需要一些思考才能确定它与第一个代码片段是等效的,正如许多注释所确认的那样,确实相当混乱

在这些情况下,考虑优化是徒劳的,编译器很可能会为这两种情况生成等效的代码

结论是明确的:

  • 始终编写简单易读的代码。
  • 效率低下但正确的代码总是胜过不正确的优化代码
  • 忘了微观优化吧,编译器在这方面比人类好得多
  • 性能与其说是代码微调,不如说是算法复杂性的问题

他们根本不做同样的事情。你是否错过了第二行的
i++
行?(顺便问一下,使用了哪个反编译器?@chqrlie啊,现在我看到了:D条件颠倒了。糟糕。@AnttiHaapala:最初的版本确实不一样……没有
i=i+1
i = 0;
while (1) {
    if (n <= i)
        return 1;
    if (a[i] == x)
        break;
    i = i + 1;
}
printf("%d", a[i]);
return 0;