打印

谁能改造这段代码,去掉goto语句

[复制链接]
2933|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djyos|  楼主 | 2007-5-6 21:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
code a;
if(b)
{
    code c;    //b成立才可以执行 c
    if(d)      //执行code c 产生条件d
        code e;
    else
        goto label;
}else
label:
{
    code f;  //f与a有很强的关联,用独立函数实现会很难看(n多参数)
}
code g;

看了不少关于goto的争论,我对此持务实的中间态度,反对滥用,但并不绝对禁止使用,但象上述代码一样从一个条件句跳到另一个条件块,还是不想使用,但又想不出更好的办法,哪位大侠帮我想想?

相关帖子

沙发
平常人| | 2007-5-6 21:47 | 只看该作者

使用switch ... case ... 可以不用goto

使用特权

评论回复
板凳
high| | 2007-5-6 22:27 | 只看该作者

我也提供一个办法

setjump和longjump提供了和goto一样的,区域内跳转功能.

使用特权

评论回复
地板
high| | 2007-5-6 22:29 | 只看该作者

//f与a有很强的关联,用独立函数实现会很难看(n多参数)

可以使用宏:
#define macroFun() do{ code f; } while(0)

使用特权

评论回复
5
sodwell| | 2007-5-7 00:21 | 只看该作者

呵呵

把else后label处改为if,就不用else了,if(!b&&!d)就可以了,前一个if做完了都必须再判断一下条件,把d的条件处break跳出!

使用特权

评论回复
6
ayb_ice| | 2007-5-7 07:50 | 只看该作者

把goto label换成将要执行的代码

把goto label换成将要执行的代码,也即重复写代码,好的编译器会编译成跳转指令,也即你的goto可以用...
另外巧妙的利用for,while,switch和break,continue也可以改造你这段代码...

使用特权

评论回复
7
sodwell| | 2007-5-7 12:15 | 只看该作者

换成将要执行的代码 我还不知道编译器能不能自动换成goto,我觉得把第一层的if else改成两个if语句+置一个标志位判断就可以了

使用特权

评论回复
8
andrew.xu| | 2007-5-7 14:06 | 只看该作者

re:

code a;
if(b)
{
    code c;    //b成立才可以执行 c
    if(d)      //执行code c 产生条件d
        code e;
    else
        goto label;
}else
label:
{
    code f;  //f与a有很强的关联,用独立函数实现会很难看(n多参数)
}
code g;
============================================================
把c改成函数,返回d
code a;
if(b && cd)       // 因为要b成立才能执行c,所以要注意b和cd的位置
  code e;
else
  code f;
code g;
=============================================
看不懂楼下的意图
 if(b){
     code c;    //b成立才可以执行 c
  }else{
     d = false;
  }
是干什么?
感觉没用

使用特权

评论回复
9
dengm| | 2007-5-7 14:22 | 只看该作者

re: 不执行code c 也产生条件d

  code a;

  if(b){
     code c;    //b成立才可以执行 c
  }else{
     d = false;
  }
  
  if(b && d) {      //执行code c 产生条件d
        code e;
  }else{
    code f;  //f与a有很强的关联,用独立函数实现会很难看(n多参数)
  }

  code g;

使用特权

评论回复
10
djyos|  楼主 | 2007-5-7 15:10 | 只看该作者

多谢各位

    8楼:C语言并没有规定并行逻辑等式的执行顺序,因此编译器完全可能先执行后面的等式.

    还是9楼和7楼的方法比较好,逻辑比较清晰,可读性也强,执行效率也只损失一点点,如果编译器够聪明的话,根本不损失执行效率.谢谢!

使用特权

评论回复
11
xufeng100| | 2007-5-8 11:51 | 只看该作者

谁能改造这段代码,去掉goto语句

code a;
d = 1;
if(b)
{
    code c;    //b成立才可以执行 c
    if(d)      //执行code c 产生条件d
        code e;
        d = 0;

}
if(!b && d)
label:
{
    code f;  //f与a有很强的关联,用独立函数实现会很难看(n多参数)
}
code g;

使用特权

评论回复
12
xplore| | 2007-5-8 12:38 | 只看该作者

使用最直观的编程方式

逻辑上直观

看程序最容易理解即可。

没必要避免使用 goto.

为避免使用goto动脑筋,愚不可及!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

454

帖子

1

粉丝