关于goto跳转的另一种使用

[复制链接]
945|8
手机看帖
扫描二维码
随时随地手机跟帖
feelhyq|  楼主 | 2017-1-13 13:35 | 显示全部楼层 |阅读模式
goto语句:

  01 tryagain:

  02     int res = doSomething();

  03

  04     //......

  05

  06     if (res < 0) {

  07         goto tryagain;

  08     }

  09     else{

  10         doSomething2();

  11     }

  替代方法,用do{} while(0)替代:

  01 do{

  02     int res = doSomething();

  03

  04     //......

  05

  06     if (res < 0) {

  07         continue;

  08     }

  09     else{

  10         doSomething2();

  11     }

  12 }while(0);

  还有这种goto:

  01     int res = doSomething();

  02

  03     //......

  04

  05     if (res < 0) {

  06         goto errorOccur;

  07     }

  08     else{

  09         doSomething2();

  10     }

  11

  12 errorOccur:

  13     doThing();

  换成这种:

  01 do{

  02     int res = doSomething();

  03

  04     //......

  05

  06     if (res < 0) {

  07         break;

  08     }

  09     else{

  10         doSomething2();

  11     }

  12 }while(0);

  13

  14 doThing();

相关帖子

mcu5i51| | 2017-1-15 15:58 | 显示全部楼层
int res;
do{    res = doSomething();
}
while(res< 0);

doSomething2();

使用特权

评论回复
mcu5i51| | 2017-1-15 16:09 | 显示全部楼层
为什么还是goto的思想;
更新res的值,小于0就循环;
其它函数
for(int res = x();res < 0;res=x());
Y();

使用特权

评论回复
feelhyq|  楼主 | 2017-1-16 09:04 | 显示全部楼层
mcu5i51 发表于 2017-1-15 15:58
int res;
do{    res = doSomething();
}

您的这些是常规用法,也是可以的

使用特权

评论回复
Simon21ic| | 2017-1-17 02:30 | 显示全部楼层
goto最经典的用法应该只有一个吧?
a = malloc(100);
if (NULL == a)
    goto fail_a;
b = malloc(200);
if (NULL == b)
    goto fail_b;
c = malloc(200);
if (NULL == c)
    goto fail_c;
return 0;
fail_c:
free(b);
fail_b:
free(a);
fail_a:
return 1;

使用特权

评论回复
feelhyq|  楼主 | 2017-1-17 08:53 | 显示全部楼层
Simon21ic 发表于 2017-1-17 02:30
goto最经典的用法应该只有一个吧?
a = malloc(100);
if (NULL == a)

首先要大赞版主一下,但是在工业领域,比如说汽车电子行业C语言明确要求不允许使用goto,因此在下才抛砖引玉

使用特权

评论回复
Simon21ic| | 2017-1-17 14:10 | 显示全部楼层
feelhyq 发表于 2017-1-17 08:53
首先要大赞版主一下,但是在工业领域,比如说汽车电子行业C语言明确要求不允许使用goto,因此在下才抛砖 ...

那汽车电子岂不是不能用linux了?

使用特权

评论回复
feelhyq|  楼主 | 2017-1-17 14:15 | 显示全部楼层
我们自己写的代码有专门的代码检查工具,只检查我们自己写的代码,一旦有不符合工业标准的就要被打板子

使用特权

评论回复
Simon21ic| | 2017-1-18 12:47 | 显示全部楼层
feelhyq 发表于 2017-1-17 14:15
我们自己写的代码有专门的代码检查工具,只检查我们自己写的代码,一旦有不符合工业标准的就要被打板子 ...

很好奇是什么工业标准不能用goto

使用特权

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

本版积分规则

3

主题

812

帖子

5

粉丝