for(;;)
{
}while(1)
{
}

解决方案 »

  1.   

    我一直以为没有任何区别。但我在网上看到的一篇文章如下说:4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
    这个问题用几个解决方案。我首选的方案是:while(1)
    {}一些程序员更喜欢如下方案:for(;;)
    {}这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是:"我被教着这样做,但从没有想到过为什么。"这会给我留下一个坏印象。第三个方案是用 goto
    Loop:
    ...
    goto Loop;
    应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。
      

  2.   

    我觉得 
    FOR会先执行两个空语句 然后才开始执行循环体。
    而WHILE 只执行一个判断然后去执行循环体。个人见解。纯属瞎侃
      

  3.   

    while1:    void main()
    2:    {
    0040B440   push        ebp
    0040B441   mov         ebp,esp
    0040B443   sub         esp,40h
    0040B446   push        ebx
    0040B447   push        esi
    0040B448   push        edi
    0040B449   lea         edi,[ebp-40h]
    0040B44C   mov         ecx,10h
    0040B451   mov         eax,0CCCCCCCCh
    0040B456   rep stos    dword ptr [edi]
    3:
    4:    while(1)
    0040B458   mov         eax,1
    0040B45D   test        eax,eax
    0040B45F   je          main+23h (0040b463)
    5:    {
    6:    }
    0040B461   jmp         main+18h (0040b458)
    7:    }
    0040B463   pop         edi
    0040B464   pop         esi
    0040B465   pop         ebx
    0040B466   mov         esp,ebp
    0040B468   pop         ebp
    0040B469   retfor
    1:    void main()
    2:    {
    0040B440   push        ebp
    0040B441   mov         ebp,esp
    0040B443   sub         esp,40h
    0040B446   push        ebx
    0040B447   push        esi
    0040B448   push        edi
    0040B449   lea         edi,[ebp-40h]
    0040B44C   mov         ecx,10h
    0040B451   mov         eax,0CCCCCCCCh
    0040B456   rep stos    dword ptr [edi]
    3:        for(;;)
    4:        {
    5:        }
    0040B458   jmp         main+18h (0040b458)
      

  4.   

    >4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
    这是有资历的人对别人思维方式的判断.
      

  5.   

    就C/C++语法很不同,for(;;)是不需要进行判断的而while(1)是每次都需要进行判断的,然而对很多编译器来说这些循环都是有优化的,各种编译效果不尽相同。