硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1185|回复: 23
收起左侧

[STM32H7] 请教下各路大神,在函数内部到底能否使用 goto 语句 ?

  [复制链接]

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
发表于 2024-9-19 11:23:37 | 显示全部楼层 |阅读模式
本帖最后由 hpdell 于 2024-9-19 11:25 编辑



请教下各路大神,在函数内部到底能否使用 goto 语句 ?

关于这个问题,有些人说是可以使用,也有些人说建议不使用,那到底是可以使用还是不能够使用呀 ?

貌似感觉有时使用 goto 在出错退出 某个函数进行统一的错误处理是比较方面的,但有些人说建议不使用又有点纠结了(感觉如果不使用的话在判断某处出错时使用 return 返回前出错处理太频繁而且调用函数也频繁繁琐)





回复

使用道具 举报

5

主题

81

回帖

96

积分

初级会员

积分
96
发表于 2024-9-19 11:31:00 | 显示全部楼层
我觉得没啥问题,可以用的
回复

使用道具 举报

10

主题

679

回帖

709

积分

金牌会员

积分
709
发表于 2024-9-19 11:41:50 | 显示全部楼层
可以用。WINDOWS 和LINUX操作系统还用了。
回复

使用道具 举报

42

主题

1015

回帖

1146

积分

至尊会员

积分
1146
发表于 2024-9-19 11:59:36 | 显示全部楼层
MISRA-C是不建议使用goto的,但并没有强制。综合来说,如果使用goto能显著降低代码数量或者复杂度,那是可以使用的。不必拘泥于教条,就看实际使用后好处是否多过坏处。
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-9-19 12:01:18 | 显示全部楼层
lizhaoming 发表于 2024-9-19 11:31
我觉得没啥问题,可以用的

那我就放心了啊,感谢感谢啊
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-9-19 12:01:24 | 显示全部楼层
hqgboy 发表于 2024-9-19 11:41
可以用。WINDOWS 和LINUX操作系统还用了。

那我就放心了啊,感谢感谢啊
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-9-19 12:01:29 | 显示全部楼层
ghslfgkkl88 发表于 2024-9-19 11:59
MISRA-C是不建议使用goto的,但并没有强制。综合来说,如果使用goto能显著降低代码数量或者复杂度,那是可 ...

那我就放心了啊,感谢感谢啊
回复

使用道具 举报

3

主题

422

回帖

431

积分

高级会员

积分
431
发表于 2024-9-19 13:07:18 | 显示全部楼层
楼主的号换人了,我肯定。
回复

使用道具 举报

4

主题

1441

回帖

1453

积分

至尊会员

积分
1453
发表于 2024-9-19 13:19:18 | 显示全部楼层
glory 发表于 2024-9-19 13:07
楼主的号换人了,我肯定。

回复

使用道具 举报

3

主题

295

回帖

304

积分

高级会员

积分
304
发表于 2024-9-19 13:24:07 | 显示全部楼层
glory 发表于 2024-9-19 13:07
楼主的号换人了,我肯定。

我也感觉是换人了,不知道是不是ai发帖机器人来论坛搞训练数据的,在其他几个论坛都看到过ai发帖机器人
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-9-20 08:52:59 | 显示全部楼层
skyshine 发表于 2024-9-19 13:24
我也感觉是换人了,不知道是不是ai发帖机器人来论坛搞训练数据的,在其他几个论坛都看到过ai发帖机器人

楼主不是AI,是真实存在的,在我早期创建的一个群里面有他。

他发帖子是这样的。能通过与坛友交流解决的问题,就交流解决,交流无法解决时,开始自己解决。
回复

使用道具 举报

6

主题

234

回帖

252

积分

高级会员

积分
252
发表于 2024-9-20 09:09:46 | 显示全部楼层
goto 在很多时候很着是很方便的.我只在错误跳转退出时用,其它时刻不用.
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-9-20 10:02:55 | 显示全部楼层
eric2013 发表于 2024-9-20 08:52
楼主不是AI,是真实存在的,在我早期创建的一个群里面有他。

他发帖子是这样的。能通过与坛友交流解决 ...

是的,能够交流解决速度快, 毕竟交流解决的问题都是大神们遇到过的,解决问题也放心些也不用担心会有什么后遗症

我的理想只复制粘贴

在没有复制粘贴的时候就自己捣鼓
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2024-9-23 18:54:28 | 显示全部楼层
可以的
实践出真理
回复

使用道具 举报

18

主题

261

回帖

315

积分

高级会员

积分
315
发表于 2024-9-23 21:14:56 | 显示全部楼层
本帖最后由 xieyang__ 于 2024-9-23 21:20 编辑

看情况吧,不建议大量使用goto。
goto通常用在
1.多层循环/判断嵌套的内部快速跳出到异常处理并结束函数。
2.跳到开始位置重试(可以用循环做,不优雅)
切忌goto来回跳转做逻辑。


不过我的常规做法抛异常出去,在外部做重试。
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-9-24 11:46:55 | 显示全部楼层
fxyc87 发表于 2024-9-20 09:09
goto 在很多时候很着是很方便的.我只在错误跳转退出时用,其它时刻不用.

我目前也是这样来使用的 , 看来是同道中人啊  
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-9-24 11:49:38 | 显示全部楼层
xieyang__ 发表于 2024-9-23 21:14
看情况吧,不建议大量使用goto。
goto通常用在
1.多层循环/判断嵌套的内部快速跳出到异常处理并结束函数 ...

你这个抛异常出去的做法也可以,只不过感觉有点少许麻烦了一丢丢而已,
回复

使用道具 举报

9

主题

138

回帖

165

积分

初级会员

积分
165
发表于 2024-9-24 12:39:53 | 显示全部楼层
一直用C语言, 一个项目下来, 代码都几万行了, 说实话搞得有点累, 有点厌烦C语言了, 可惜嵌入式领域, 没啥合适的替代品.
回复

使用道具 举报

95

主题

529

回帖

829

积分

金牌会员

积分
829
发表于 2024-9-24 14:58:59 | 显示全部楼层
amfy 发表于 2024-9-24 12:39
一直用C语言, 一个项目下来, 代码都几万行了, 说实话搞得有点累, 有点厌烦C语言了, 可惜嵌入式领域, 没啥合 ...

把库的代码也算进去了吗...
感觉我一天写的代码就两三百行。。

顶多顶多也超不过500行。
共产主义一定胜利!
回复

使用道具 举报

9

主题

138

回帖

165

积分

初级会员

积分
165
发表于 2024-9-24 19:31:05 | 显示全部楼层
会飞的猪_2020 发表于 2024-9-24 14:58
把库的代码也算进去了吗...
感觉我一天写的代码就两三百行。。

仅仅是自己纯手写的代码, 不算第三方的内容,
这是一个寿命周期很长的产品, 中间经历过至少四次重构和三次更换CPU平台, 还在开发新的功能.
功能比较多, 慢慢的代码量就积累起来了.
今年刚刚又重新进行了一次重构 , 里面基本上没什么闲置的代码,
回复

使用道具 举报

18

主题

261

回帖

315

积分

高级会员

积分
315
发表于 2024-9-24 20:30:58 | 显示全部楼层
hpdell 发表于 2024-9-24 11:49
你这个抛异常出去的做法也可以,只不过感觉有点少许麻烦了一丢丢而已,

毕竟结构化是要付出一些代价的。
你可以自己设计一个小框架,把业务逻辑,中间件,底层驱动,异常处理这些隔离开。这样越做越像搞软件的那套了。缺点就是代码量大了
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-9-24 21:12:27 | 显示全部楼层
xieyang__ 发表于 2024-9-24 20:30
毕竟结构化是要付出一些代价的。
你可以自己设计一个小框架,把业务逻辑,中间件,底层驱动,异常处理这 ...

太复杂的东东不想折腾啊, 比较 mcu 的资源有限
回复

使用道具 举报

18

主题

261

回帖

315

积分

高级会员

积分
315
发表于 2024-9-24 21:37:12 | 显示全部楼层
hpdell 发表于 2024-9-24 21:12
太复杂的东东不想折腾啊, 比较 mcu 的资源有限

看具体情况,最适合你的才是最好的
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-9-25 08:41:38 | 显示全部楼层
xieyang__ 发表于 2024-9-24 21:37
看具体情况,最适合你的才是最好的

是的, 我的意思是在满足项目要求的情况下越简单越好,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-29 02:18 , Processed in 0.365770 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表