当实现一个无限循环,有没有为VS VS转到(C语言)(1)(;;)使用,而有区别吗? [英] When implementing an infinite loop, is there a difference in using while(1) vs for(;;) vs goto (in C)?
本文介绍了当实现一个无限循环,有没有为VS VS转到(C语言)(1)(;;)使用,而有区别吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当执行一个无限循环,有没有在使用不同的而(1)
VS 为(;;)
VS 转到
?
When implementing an infinite loop, is there a difference in using while(1)
vs for(;;)
vs goto
?
谢谢,
Chenz
Thanks, Chenz
推荐答案
他们是等价的,即使你把优化关闭。
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
这篇关于当实现一个无限循环,有没有为VS VS转到(C语言)(1)(;;)使用,而有区别吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文