随笔三十五:循环

1、do-while 循环

        do-while 语句的通用形式如下:

do
    body-statement
while(test-expr);

        do-while 的通用形式可以翻译成如下所示的条件和 goto 语句:

loop:
    body-statement
    t = test-expr;
    if (t)
        goto loop;

        理解产生的汇编代码与原始代码之间的关系,关键是找到程序值和寄存器之间的映射关系。


2、while 循环

        while 语句的通用形式如下:

while (test-expr)
    body-statement

        将 while 循环翻译成机器代码有很多种方法。一种常见的方法,也是 GCC 采用的方法是使用条件分支,在需要时省略循环体的第一次执行,从而将代码转换成do-while循环,如下:

if (!test-expr)
    goto done;
do
    body-statement
    while (test-expr)
done:

接下来,这个代码可以直接翻译成 goto 代码,如下:

t = test-expr;
if (!t)
    goto done;
loop:
    body-sttement
    t = test-expr;
    if (t)
        goto loop;
done:

使用这种实现策略,编译器常常会优化最开始的测试,比如说认为总是满足测试条件。


3、for 循环

for 循环的通用形式如下:

for (init-expr; test-expr; update-expr)
    body-statement

        C 语言标准说明(注意:当循环体中有continue时,不可直接转换),这样的一个循环的行为与下面这段使用 while 循环代码的行为一样:

init-expr;
while (test-expr)
{
    body-statement;
    update-expr;
}

这段代码编译后的形式,基于前面讲过的从 while 到 do-while 的转换,首先给出 do-while 形式:

init-expr;
if (!test-expr)
    goto done;
do
{
    body-statement
    update-expr;
}while (test-expr);
done:

然后,将踏转换成 goto 代码:

init-expr;
t = test-expr;
if (!t)
    goto done;
loop:
    body-statement
    update-expr;
    t = test-expr;
    if (t)
        goto loop:
done:


    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值