首页 > 代码库 > 【C语言天天练(一)】while(1)死循环与for(;;)死循环的区别
【C语言天天练(一)】while(1)死循环与for(;;)死循环的区别
单片机的编程中经常用到while(1)死循环来进行轮寻操作,但分析Linux内核源代码时却经常见到for(;;)作为死循环的条件。
两者区别:
区别一
for(;;)死循环里的两个;;代表两个空语句,编译器一般会优化掉它们,直接进入循环体。
while(1)死循环里的1被看成表达式,每循环一次都要判断常量1是不是等于零。
区别二
for.c源码:
#include <stdio.h> int main(void) { for(;;){ printf("123\n"); } return 0; }while.c源码:
#include <stdio.h> int main(void) { while(1){ printf("123\n"); } return 0; }汇编上面的两个程序发现它们的汇编源码完全相同:
.file "while.c" .section .rodata .LC0: .string "123" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $16, %esp .L2: movl $.LC0, (%esp) call puts jmp .L2 .size main, .-main .ident "GCC: (Ubuntu 4.4.1-4ubuntu8) 4.4.1" .section .note.GNU-stack,"",@progbits这样看来两者似乎没有任何区别,其实不然,编译程序的大小不同:
-rwxr-xr-x 1 book book 8296 2014-06-12 22:32 for
-rwxr-xr-x 1 book book 8298 2014-06-12 22:33 while
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。