为什么这个程序会陷入无限循环?

时间:2019-07-26 16:23:17

标签: c comma-operator

当我在以下代码中将i<0,5放入for循环的条件部分中

#include<stdio.h>
int main()
{
  int i;
  for(i = 0;i<0,5;i++)
    printf("%d\n",i);
  return 0;
}

2 个答案:

答案 0 :(得分:1)

答案是5始终是true
请参阅从您的反汇编的以下代码。
条件部分仅引用5

move eax, 5将5保存到eax寄存器中。
test eax, eax正在eaxeax之间进行比较。
它必须始终相同。因此,这始终是正确的。

009318FA  mov         eax,5
009318FF  test        eax,eax  
00931901  je          main+56h (0931916h) 

这是完整的代码:

        int i;
        for (i = 0; i < 0, 5; i++)
009318E8  mov         dword ptr [i],0  
009318EF  jmp         main+3Ah (09318FAh)  
009318F1  mov         eax,dword ptr [i]  
009318F4  add         eax,1  
009318F7  mov         dword ptr [i],eax  
009318FA  mov         eax,5  
        int i;
        for (i = 0; i < 0, 5; i++)
009318FF  test        eax,eax  
00931901  je          main+56h (0931916h)  
            printf("%d\n", i);
00931903  mov         eax,dword ptr [i]  
00931906  push        eax  
00931907  push        offset string "%d\n" (0937B30h)  
0093190C  call        _printf (093104Bh)  
00931911  add         esp,8  
00931914  jmp         main+31h (09318F1h) 

答案 1 :(得分:-1)

如果您希望循环在5次迭代后停止,则必须编写

for(i = 0;i<5;i++)
   printf("%d\n",i);

根据melpomene的建议,here解释了逗号操作