它的执行过程如下:1.先求解表达式12.求解表达式2若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步; 若其值为假(0),则结束循环,转到第5)步。 3.求解表达式34.转回上面第2)步继续执行。5.循环结束,执行for语句下面的一个语句。 执行过程可用下图表示:
while(1)和for(;;)异同点 这里先说一下结论,然后再验证验证结论。1.相同点 作用和效果都一样:都是实现无限循环的功能。
2.不同点 while(1):其中括号里面是一个条件,程序会判断真假。而括号里面的“1”***是一个“真值”。 其中,每一次循环,编译器都要判断常量1是不是等于零。 for(;;):这两个;;空语句,编译器一般会优化掉的,直接进入死循环。
根据上面的描述,你可能会觉得:while(1) 比 for(;;) 要做更多事,汇编代码更多,代码量也更大。 但事实是这样吗?下面验证一下。验证while(1)和for(;;)差异 我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。1.源代码 while.c:
2.生成汇编 我们这里使用gcc编译器生成汇编,执行命令如下:
while汇编代码:
for汇编代码:
|