c - 这两个 FOR 循环有什么区别?

标签 c

我正在学习 C,并在我正在阅读的书中看到了下面列出的第一个循环。我很好奇两者之间有什么区别,因为我习惯使用第二个,即使它们返回不同的结果,也无法找出区别。

for(i = 0; i < 10; ++i){}

for(i = 0; i <= 10; i++){}

最佳答案

第一个迭代到 9,第二个迭代到 10。仅此而已。

前后递增操作没有区别。

为两个版本生成的未优化代码:

    for(int i = 0; i < 10; ++i)
00E517AE  mov         dword ptr [i],0  
00E517B5  jmp         wmain+30h (0E517C0h)  
00E517B7  mov         eax,dword ptr [i]  
00E517BA  add         eax,1  
00E517BD  mov         dword ptr [i],eax  
00E517C0  cmp         dword ptr [i],0Ah  
00E517C4  jge         wmain+53h (0E517E3h)  
    {
    }

    for(int i = 0; i <= 10; i++)
00E517E3  mov         dword ptr [i],0  
00E517EA  jmp         wmain+65h (0E517F5h)  
00E517EC  mov         eax,dword ptr [i]  
00E517EF  add         eax,1  
00E517F2  mov         dword ptr [i],eax  
00E517F5  cmp         dword ptr [i],0Ah  
00E517F9  jg          wmain+88h (0E51818h)  
    {
    }

因此,即使在这里,也不会有性能损失。 i++++i 慢的事实是不正确的(至少在这种情况下,它没有什么区别)。对于 int y = i++ 来说,它会更慢,但在这种情况下,两者会做不同的事情,但这里的情况并非如此。性能问题在 20 年前的编译器上可能是存在的,但现在不再是了。

关于c - 这两个 FOR 循环有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12366606/

相关文章:

c - 使用 strcpy、strcat、sprintf 将 3 个字符串至少各组合一次

c - 这些 typedef 在 C 中意味着什么?他们在宣布什么?

c - 如何使用现代编译器使用旧语法编译 C 代码?

c - Readlink 找不到 C 文件 (MSYS)

c - 为什么单个指针的行为类似于数组,并且不需要解引用运算符 (*) 来访问指向的元素?

在c中将字符串转换为 double

c - 为什么 scanf 函数会自动获取先前的 '\n' 值以及如何逃脱此事件?

c - extern 和 static 的正确用法是什么?

c - C 中的 fork 和指针

c - node *node1 与 node* node1 有什么区别?