该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
C语言实现死循环有很多种方式,但是最常用的就是for (; ;);和while (1);此外,还可以使用goto语句实现类似汇编风格的死循环。
深度解析:
这个题目比较简单,但是很实用。注意for循环中两个分号分开的三个部分其实都是可以省略的,所以当你看到for循环的某个部分缺失时不用惊讶。
goto关键字一向被定义为不建议使用,主要原因是goto无条件到处跳来跳去的超级灵活特性导致它破坏了代码的结构性,使得代码灵活到难以读懂的程度了,这显然是大家不愿意看到的。但是goto也是有其存在的价值的(星爷语录:就算是一张卫生纸,一条破内裤都有它的用处),最适合使用goto的一场场景就是在多重循环体的内部,此时使用goto可以一步直接跳出所有的循环层次(以前使用break则只能逐层跳出,麻烦;现在用goto,一跳顶过去五跳,实惠···)。
熟悉汇编的同学应该能感到,goto实际上是汇编中跳转指令的简单封装(譬如MCS51中的jmp指令,ARM汇编中的b指令)。而for和while、do while循环则是汇编中这些跳转指令的复杂封装,for循环等在汇编层次也是通过跳转指令实现的。之所以大家觉得C语言编程比汇编容易一些,就是因为C编译器帮大家做了一些基础性的封装,形成了C语言这种更符合人类思维方式的结构化编程语言。而直接使用汇编语言,则需要程序员“委屈自己”,去适应机器的思维方式,按照机器所能理解的方式去“讲话”。
代码如下:
#include
// function prototype declaration
void deadloop_for(void);
void deadloop_while(void);
void deadloop_goto(void);
int main(void)
{
//deadloop_for();
//deadloop_while();
deadloop_goto();
return 0;
}
void deadloop_for(void)
{
for (; ;);
printf("----after deadloop----\n");
}
void deadloop_while(void)
{
while (1);
printf("----after deadloop----\n");
}
void deadloop_goto(void)
{
label:
goto label;
printf("----after deadloop----\n");
}