Chinaunix

标题: 设想, 改进C语言的break语句直接跳出多层循环,改进continue语句... [打印本页]

作者: tgbvc    时间: 2008-02-29 15:47
标题: 设想, 改进C语言的break语句直接跳出多层循环,改进continue语句...
直接跳出多层循环,除goto语句外有没有其它好方法?

设想,为能直接跳出多层循环或多重switch语句,对break语句扩展:
break n; 直接跳出n层循环或第n层switch语句,“break;” 与 “break 0;”都是跳出当前循环或终止当前switch语句。


void main( void )
{
        while(1) /* 第1层循环 */
        {
                while(1)  /* 第2层循环 */
                {
                        while(1)  /* 第3层循环 */
                        {
                                 break 2; /* 在这儿直接跳出1、2、3层循环。 */                  
                        }
                }
        }
}

为能直接结束第n层循环的本次循环,对continue语句扩展:
continue n; 直接结束第n层循环的本次循环,“continue;” 与 “continue 0;”直接结束当前循环的本次循环。


void main( void )
{
        while(1) /* 第1层循环 */
        {
                while(1)  /* 第2层循环 */
                {
                        while(1)  /* 第3层循环 */
                        {
                                 continue 1; /* 在这儿直接结束第2层循环的本次循环。 */                  
                        }
                }
        }
}

[ 本帖最后由 tgbvc 于 2008-2-29 22:28 编辑 ]
作者: zx_wing    时间: 2008-02-29 16:08
原帖由 tgbvc 于 2008-2-29 15:47 发表
#include

void main( void )
{
        while(1) /* 第1层循环 */
        {
                while(1)  /* 第2层循环 */
                {
                        while(1)  /* 第3层循环 */
    ...

setjmp,longjmp
还有exit(),哈哈哈
作者: 放驴娃    时间: 2008-02-29 16:09
goto 吧。
作者: tgbvc    时间: 2008-02-29 16:16
欢迎讨论,
作者: tgbvc    时间: 2008-02-29 16:29
建议把此帖加精。
作者: scutan    时间: 2008-02-29 16:43
C语言的goto不是提供了这样的手段吗? 你还想设计什么?
不过我觉得楼主应该先学做人, 再学做事.
作者: liulang0808    时间: 2008-02-29 16:50
原帖由 scutan 于 2008-2-29 16:43 发表
C语言的goto不是提供了这样的手段吗? 你还想设计什么?
不过我觉得楼主应该先学做人, 再学做事.

goto 是不是很常用啊?
作者: scutan    时间: 2008-02-29 16:56
原帖由 liulang0808 于 2008-2-29 16:50 发表

goto 是不是很常用啊?


在内核中确实很常用. 当然也不是滥用, 一般用在较少区域内还是比较可行的. 一味地指责它的不好也是不对的, 这一点感觉有些教科书做得过头了.
作者: tgbvc    时间: 2008-02-29 16:58
原帖由 scutan 于 2008-2-29 16:43 发表
C语言的goto不是提供了这样的手段吗? 你还想设计什么?
不过我觉得楼主应该先学做人, 再学做事.


看你以前的回帖,不应该那么傻呀!傻孩子,goto是不建议经常使用的。
你先确定自己做男的还是女的,再来谈论做人好么,小P孩。
作者: flw2    时间: 2008-02-29 17:02
你要的不就是goto的吗,没有什么东西符合你的要求又比goto更好吧,说实话,我又想起某个熟人
作者: flw    时间: 2008-02-29 17:03
原帖由 flw2 于 2008-2-29 17:02 发表
你要的不就是goto的吗,没有什么东西符合你的要求又比goto更好吧,说实话,我又想起某个熟人

有,但是在 C 语言中增加此特性,没必要。
作者: flw2    时间: 2008-02-29 17:04
原帖由 flw 于 2008-2-29 17:03 发表

有,但是在 C 语言中增加此特性,没必要。

就是说C中,我还害怕还有别的呢
哪有?有什么?
作者: yulc    时间: 2008-02-29 17:08
原帖由 tgbvc 于 2008-2-29 15:47 发表

void main( void )
{
        while(1) /* 第1层循环 */
        {
                while(1)  /* 第2层循环 */
                {
                        while(1)  /* 第3层循环 */
                        {
                                       break 3; /* 在这儿直接跳出1、2、3层循环。 */                  
                        }
                }
        }
}





你这明显错了, 依你的程序,应该是 break 2;
作者: while(1)    时间: 2008-02-29 17:09
想法很牛
作者: scutan    时间: 2008-02-29 17:10
原帖由 tgbvc 于 2008-2-29 16:58 发表


看你以前的回帖,不应该那么傻呀!傻孩子,goto是不建议经常使用的。
你先确定自己做男的还是女的,再来谈论做人好么,小P孩。


唉, 我没骂你, 倒是你沉不住气先开骂了.
做人谦虚是应该的.

如果你实在要改进break就加点什么break(1), break(2)之类的吧.
作者: tgbvc    时间: 2008-02-29 22:21
原帖由 yulc 于 2008-2-29 17:08 发表



你这明显错了, 依你的程序,应该是 break 2;


 已改了,谢谢。
作者: anthony1983    时间: 2008-03-01 16:14
我可爱的GOTO啊
作者: Sorehead    时间: 2008-03-03 13:48
我倒是觉得语法上实现了这个挺好,php就这么干。
作者: maxxfire    时间: 2008-03-03 14:07
请楼主直接改用Perl进行编程,perl提供循环内控制完全符合楼主要求。
作者: cjaizss    时间: 2008-03-03 15:16
我觉得C语言没这个必要,尽管有的脚本语言提供了这个功能,比如bash。
C语言下goto即可,不要听有的教科书上面所说goto是毒药,该用就得用。教科书上那么写是为了防止初学者滥用。
作者: dpsuffix    时间: 2008-03-03 16:49
明显程序就有问题,当你缩进超过3个的时候,你就得考虑考虑是否要重写你的代码拉
作者: hfjzhl    时间: 2008-03-04 15:03
这样的程序有意思吗?搞的太复杂,不要把自己给搞糊了,
作者: sjh_311    时间: 2008-03-04 16:33
goto、longjmp
作者: NalaGinrut    时间: 2008-03-04 17:15
我认为在这个时候用GOTO正是体现了其优势
如果非要用break来得到GOTO的效果,那跟放弃循环而用GOTO没什么区别,都是弃其长而扬其短
作者: 太平绅士    时间: 2008-03-04 17:35
C++的话,用try catch吧
作者: rfvsh    时间: 2008-03-04 21:09
LZ的想法很好.
很多人没做过这么复杂的程序, 他们是想不到的.
作者: ghosthjf    时间: 2008-03-05 10:00
这好比儿子发现自己身上有个老子没有的优点,然后对老子说:你应该向我这样。。。
作者: maxxfire    时间: 2008-03-05 10:11
楼主果然不是一般人。。看他发的帖子:

http://bbs.chinaunix.net/space.php?657429/mythreads
作者: heighgun    时间: 2008-03-05 11:12
标题: 回复 #1 tgbvc 的帖子
这样做会引入一个嵌套层的概念,而这个对于C语言来说层次较高,相当于编译器来帮你加标签和GOTO,不是必要的。
作者: charming72    时间: 2008-03-05 11:57
原帖由 ghosthjf 于 2008-3-5 10:00 发表
这好比儿子发现自己身上有个老子没有的优点,然后对老子说:你应该向我这样。。。

佩服
作者: choc    时间: 2008-03-05 12:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: yecheng_110    时间: 2008-03-05 13:04
用if和goto就可以实现所有的控制结构
但是在高级语言里没人会这样做吧
LZ的想法是不错
作者: suzhouxiao    时间: 2008-03-05 14:23
楼主想法不错啊。
在JAVA语言中,break语句就可以这样做的。看下面一段JAVA代码
//使用标签退出循环示例
class breakloop3 {
  public static void main(String args[]) {
    int i;   
    for(i=1; i<=3; i++) {
one:    {
two:    {
three:  {
            System.out.println("i is " + i+" now\n");
            if(i==1) break one;
            if(i==2) break two;
            if(i==3) break three;
            System.out.println("won't print");   
          }
          System.out.println("block three finished");
        }
        System.out.println("block two finished");
      }
      System.out.println("block one finished");
    }
    System.out.println("all is over");
  }
}
不过我认为这样做,程序的可读性不怎么好。
作者: swordfish.cn    时间: 2008-03-05 14:38
其实楼主有想法很好,但是把C标准“改进”一下,那么现有的几大系统会不会崩溃呢?
作者: prc    时间: 2008-03-05 14:39
原帖由 suzhouxiao 于 2008-3-5 14:23 发表
楼主想法不错啊。
在JAVA语言中,break语句就可以这样做的。看下面一段JAVA代码
//使用标签退出循环示例
class breakloop3 {
  public static void main(String args[]) {
    int i;   
    for(i=1; i


JAVA的break one和C的goto one有本质上的区别吗?
作者: mingyanguo    时间: 2008-03-05 14:51
原帖由 scutan 于 2008-2-29 00:43 发表
C语言的goto不是提供了这样的手段吗? 你还想设计什么?
不过我觉得楼主应该先学做人, 再学做事.

做人难道不是天生就会的 做人不是目的只是结果啊,人们更看中做人中的愉悦吧
作者: snow888    时间: 2008-03-06 10:55
原帖由 liulang0808 于 2008-2-29 16:50 发表

goto 是不是很常用啊?



按照建议,能不用 goto 的地方尽量不要用 goto
作者: blueboy83    时间: 2008-03-06 12:05
goto
作者: 目的    时间: 2008-03-06 17:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: 1966ba    时间: 2008-03-09 15:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: ljoo    时间: 2008-03-09 15:28
封装goto
#define goto Break


作者: JohnBull    时间: 2008-03-09 15:38
原帖由 ljoo 于 2008-3-9 15:28 发表
封装goto
#define goto Break



好! 这样一来,大家happy了!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2