码迷,mamicode.com
首页 > 编程语言 > 详细

【C语言天天练(一)】while(1)死循环与for(;;)死循环的区别

时间:2014-06-15 19:11:23      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:c   while1死循环   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




【C语言天天练(一)】while(1)死循环与for(;;)死循环的区别,布布扣,bubuko.com

【C语言天天练(一)】while(1)死循环与for(;;)死循环的区别

标签:c   while1死循环   for死循环   

原文地址:http://blog.csdn.net/to_be_it_1/article/details/30320289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!