免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: dl1987
打印 上一主题 下一主题

[C] 在do{}while中使用break还是goto? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-07-22 23:06 |只看该作者
呵呵,插一句,跨函数、跨文件可以 setjmp & longjmp

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
12 [报告]
发表于 2009-07-22 23:10 |只看该作者
原帖由 prolj 于 2009-7-22 21:50 发表
力挺goto!
你用错了goto就要勇于承担责任,别说是goto的错!
另外,goto不是万能的,跨文件跳不过去。

goto不可以跨到别的函数,只可以在本函数内跳转。
并且行号都只在函数内有效,不同的函数可以使用相同名字的行号

  1. $ cat 10.c
  2. #include <stdio.h>
  3. void f(int i)
  4. {
  5.         printf("fuck!\n");
  6.         if(i)
  7.                 goto A;
  8.         printf("FUCK!\n");
  9. }
  10. int main()
  11. {
  12.         int i;
  13.         scanf("%d",&i);
  14.         f(i);
  15.         printf("fuck\n");
  16. A:
  17.         printf("FUCK\n");
  18. }
  19. $ gcc 10.c
  20. 10.c: In function  f:
  21. 10.c:6: error: label   A   used but not defined

复制代码

论坛徽章:
0
13 [报告]
发表于 2009-07-23 03:17 |只看该作者
我也发一段代码,在不同的函数跳转:

#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>

jmp_buf env;

void f(int i)
{
        longjmp(env, i);
}

int main()
{
        int ret, i = 0;

        if ((ret = setjmp(env)) != 0) {
                printf("ret = %d\n");
                if (ret > 10)
                        exit(0);
        }

        f(i++);

        return 0;
}

论坛徽章:
0
14 [报告]
发表于 2009-07-23 07:53 |只看该作者
原帖由 windaoo 于 2009-7-23 03:17 发表
我也发一段代码,在不同的函数跳转:

#include
#include
#include

jmp_buf env;

void f(int i)
{
        longjmp(env, i);
}

int main()
{
        int ret, i = 0;

        if ((ret = setjmp(env)) != 0 ...





这个不用也罢。。。

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
15 [报告]
发表于 2009-07-23 08:25 |只看该作者
break是用来跳转循环语句和swtich语句的
goto是跳转到程序的另一个地方的

论坛徽章:
0
16 [报告]
发表于 2009-07-23 08:38 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
17 [报告]
发表于 2009-07-23 09:39 |只看该作者
原帖由 cj_gameboy 于 2009-7-23 08:38 发表
有break不就够了啦,要goto干嘛,而且代码看起来痛苦的要命

那是你没尝到goto到来的好处!

论坛徽章:
0
18 [报告]
发表于 2009-07-23 10:05 |只看该作者
怎么扯到 goto   和 jmp上面去了

程序运行时有 跨文件这个概念吗。。。。

论坛徽章:
0
19 [报告]
发表于 2009-07-23 14:03 |只看该作者
原帖由 蓝色神话 于 2009-7-23 09:39 发表

那是你没尝到goto到来的好处!


Nod,goto不该为那些无能的白痴程序员背上黑锅!
不论是挺还是倒,过犹不及!
谢谢

论坛徽章:
0
20 [报告]
发表于 2009-07-24 17:41 |只看该作者
原帖由 cj_gameboy 于 2009-7-23 08:38 发表
有break不就够了啦,要goto干嘛,而且代码看起来痛苦的要命


  1. for(..) {
  2.     for(...) {
  3.       for(...) {
  4.      }
  5.    }
  6. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP