在实现无限循环时,使用 while(1) 与 for(;;) 与 goto(在 C 中)有区别吗? [英] When implementing an infinite loop, is there a difference in using while(1) vs for(;;) vs goto (in C)?
本文介绍了在实现无限循环时,使用 while(1) 与 for(;;) 与 goto(在 C 中)有区别吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在实现无限循环时,使用 while(1)
与 for(;;)
与 goto
有区别吗?
When implementing an infinite loop, is there a difference in using while(1)
vs for(;;)
vs goto
?
谢谢,陈兹
推荐答案
它们是等效的,即使您关闭优化器.
They are equivalent, even if you turn the optimizer off.
示例:
#include <stdio.h>
extern void f(void) {
while(1) {
putchar(' ');
}
}
extern void g(void) {
for(;;){
putchar(' ');
}
}
extern void h(void) {
z:
putchar(' ');
goto z;
}
使用 gcc -O0
编译给出所有 3 个函数的等效汇编:
Compile with gcc -O0
gives equivalent assembly for all 3 functions:
f:
; [ EXTERNAL ]
;
+00000 00000fb4 80402DE9 stmdb sp!,{r7,lr}
+00004 00000fb8 00708DE2 add r7,sp,#0x0
+00008 00000fbc 2000A0E3 loc_000008: mov r0,#0x20
+0000c 00000fc0 0A0000EB bl putchar (stub)
+00010 00000fc4 FCFFFFEA b loc_000008
;
;
g:
; [ EXTERNAL ]
;
+00000 00000fc8 80402DE9 stmdb sp!,{r7,lr}
+00004 00000fcc 00708DE2 add r7,sp,#0x0
+00008 00000fd0 2000A0E3 loc_000008: mov r0,#0x20
+0000c 00000fd4 050000EB bl putchar (stub)
+00010 00000fd8 FCFFFFEA b loc_000008
;
;
h:
; [ EXTERNAL ]
;
+00000 00000fdc 80402DE9 stmdb sp!,{r7,lr}
+00004 00000fe0 00708DE2 add r7,sp,#0x0
+00008 00000fe4 2000A0E3 loc_000008: mov r0,#0x20
+0000c 00000fe8 000000EB bl putchar (stub)
+00010 00000fec FCFFFFEA b loc_000008
这篇关于在实现无限循环时,使用 while(1) 与 for(;;) 与 goto(在 C 中)有区别吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文