这两个无限循环有什么不同吗? for(;;){}while(1){} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我一直以为没有任何区别。但我在网上看到的一篇文章如下说:4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。我首选的方案是:while(1){}一些程序员更喜欢如下方案:for(;;){}这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是:"我被教着这样做,但从没有想到过为什么。"这会给我留下一个坏印象。第三个方案是用 gotoLoop:...goto Loop;应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。 我觉得 FOR会先执行两个空语句 然后才开始执行循环体。而WHILE 只执行一个判断然后去执行循环体。个人见解。纯属瞎侃 while1: void main()2: {0040B440 push ebp0040B441 mov ebp,esp0040B443 sub esp,40h0040B446 push ebx0040B447 push esi0040B448 push edi0040B449 lea edi,[ebp-40h]0040B44C mov ecx,10h0040B451 mov eax,0CCCCCCCCh0040B456 rep stos dword ptr [edi]3:4: while(1)0040B458 mov eax,10040B45D test eax,eax0040B45F je main+23h (0040b463)5: {6: }0040B461 jmp main+18h (0040b458)7: }0040B463 pop edi0040B464 pop esi0040B465 pop ebx0040B466 mov esp,ebp0040B468 pop ebp0040B469 retfor1: void main()2: {0040B440 push ebp0040B441 mov ebp,esp0040B443 sub esp,40h0040B446 push ebx0040B447 push esi0040B448 push edi0040B449 lea edi,[ebp-40h]0040B44C mov ecx,10h0040B451 mov eax,0CCCCCCCCh0040B456 rep stos dword ptr [edi]3: for(;;)4: {5: }0040B458 jmp main+18h (0040b458) >4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这是有资历的人对别人思维方式的判断. 就C/C++语法很不同,for(;;)是不需要进行判断的而while(1)是每次都需要进行判断的,然而对很多编译器来说这些循环都是有优化的,各种编译效果不尽相同。 如何实现提示信息跟随鼠标移动。 MFC中LButtonDown中,使用SendMessage后,不再响应LButtonUp事件了,怎么解决? 探讨画wave文件的频谱图 如何在Windows2000域服务器中获知域用户的login和logout的信息? 头疼的变量转换问题~ 对于静态拆分,这几个错误原因何在? 在vb中使用dll的问题 请问GetListCtrl错误的原因 系统2000,用installshield6.0包了程序,有问题 我很需要小波算法对BMP图象进行压缩的VC++源代码 在MDI中,怎样在文档消失(关闭)之前出现保存对话框? 多文档应用程序中,如何关闭新建的子窗口
这个问题用几个解决方案。我首选的方案是:while(1)
{}一些程序员更喜欢如下方案:for(;;)
{}这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是:"我被教着这样做,但从没有想到过为什么。"这会给我留下一个坏印象。第三个方案是用 goto
Loop:
...
goto Loop;
应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。
FOR会先执行两个空语句 然后才开始执行循环体。
而WHILE 只执行一个判断然后去执行循环体。个人见解。纯属瞎侃
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)
这是有资历的人对别人思维方式的判断.