找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3569|回复: 17
打印 上一主题 下一主题
收起左侧

关于C语言GOTO语句的用法

  [复制链接]
跳转到指定楼层
楼主
ID:884042 发表于 2021-3-23 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在编写一个单片机程序的时候,遇到了一个问题:想从IF语句里退出,但不退出函数。网上说要用GOTO语句,但我不知道怎么用,请各位指导下。
  1. #include"reg52.h"
  2. sbit key1 = P1^0;
  3. void keybord()
  4. {
  5.       if(key1 ==  0)
  6.       {
  7.             //在此退出
  8.       }
  9. }
  10. void mian()
  11. {
  12.       keybord();
  13. }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:693038 发表于 2021-3-23 10:27 | 只看该作者
直接用return就可以了, 用goto的话需要有要跳去的标签位置
lable:******


if(***){
   goto lable;
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:139866 发表于 2021-3-24 09:44 | 只看该作者
标志位啊,设N个标志位,用到哪个就跳哪个
回复

使用道具 举报

地板
ID:304608 发表于 2021-3-24 09:52 | 只看该作者
你需要考虑下你代码逻辑问题, 可能没有规划好, 一般是可以避免使用goto语句的
回复

使用道具 举报

5#
ID:207421 发表于 2021-3-24 13:20 | 只看该作者
  • #include"reg52.h"
  • sbit key1 = P1^0;
  • int num;
  • bit flag;
  • void keybord()
  • {
  •       if(key1 ==  0)
  •       {
  •             GOTO RUN;// 加flag = 1;在此退出,好像也没什么意义
  •       }
  • RUN:
  •      num++;
  •      if(2021 == num) num = 0;
  • }
  • void mian()
  • {
  •       while(1)
  •       {
  •               if(0==flag)
  •               {
  •                       keybord();
  •               }
  •       }
  • }

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:894154 发表于 2021-3-24 13:30 | 只看该作者
单片机里面不用while吗,要程序停的时候就停在睡眠模式,退出if后在if语句后面跟你要实现的代码就行了 ,用不着goto啊

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:158375 发表于 2021-3-25 08:37 | 只看该作者
可以用return退出的。
当自己的C语言水平不够时,最好避免用GOTO。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:592807 发表于 2021-3-25 08:58 | 只看该作者
笨笨兔 发表于 2021-3-25 08:37
可以用return退出的。
当自己的C语言水平不够时,最好避免用GOTO。

我也建议用return。另外用if.....else if.....else 结构,将所有情况包含起来,进入if之后里面代码执行完不就直接到最后一步退出了吗。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:723547 发表于 2021-3-26 17:27 | 只看该作者
key1=1;
把这个语句加进去就可以了
return会造成后面的语句不执行

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

10#
ID:47286 发表于 2021-3-26 23:45 | 只看该作者
我不是答题的 只是搭车问一下 goto哪不好啊 从开始学的时候 书上就说尽量不用goto 然后 我就没用过 但书上也没说明白哪不好 后来看到的地方也都是一句不好 或者尽量不用就完了 有哪位有闲工夫的给讲讲为什么吗

我顶多理解到有很多逻辑的时候如果用goto愣跳会有麻烦 比如一些标记没清零或者变量没清零什么的 其它也没觉得goto哪不好

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

11#
ID:592807 发表于 2021-3-27 17:39 | 只看该作者
dzbj 发表于 2021-3-26 23:45
我不是答题的 只是搭车问一下 goto哪不好啊 从开始学的时候 书上就说尽量不用goto 然后 我就没用过 但书上 ...

因为GOTO语句跳转的位置是随意的,可以往后跳也可以往前跳。往后跳的话会容易出现你说的一些标志位没处理或者某些功能没关闭的情况。但是如果往前跳的话,就可能会出现重复定义,重复赋值,自己构成无限循环之类的问题。另外有多个GOTO语句的话程序就会想蜘蛛网一样,乱连一通,降低代码的可读性,修改代码也会出现很多麻烦。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

12#
ID:160500 发表于 2021-3-27 18:10 | 只看该作者
看了这个程序,在这里使用GOTO没有什么意义。直接取消就可以了。因为在这个IF里goto后面的代码完全是无用的代码
回复

使用道具 举报

13#
ID:897478 发表于 2021-3-27 22:35 | 只看该作者
用return就行
回复

使用道具 举报

14#
ID:47286 发表于 2021-3-27 23:11 | 只看该作者
黄youhui 发表于 2021-3-27 17:39
因为GOTO语句跳转的位置是随意的,可以往后跳也可以往前跳。往后跳的话会容易出现你说的一些标志位没处理 ...

感谢你的回复 你说的有道理 我因为没用过又有点好奇 才有此问
回复

使用道具 举报

15#
ID:895684 发表于 2021-3-28 15:41 | 只看该作者
go  to语句比较直接简单,就是直接从一个地方到你想去的地方,适合自己写程序使用,别人看很容易乱

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

16#
ID:435676 发表于 2021-3-28 16:21 | 只看该作者
含义,goto语句也称为无条件转移语句;goto语句的语义是改变程序流向, 转去执行语句标号所标识的语句;goto语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。写法楼上已经有人给例子了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

17#
ID:898654 发表于 2021-3-30 17:37 | 只看该作者
goto很厉害的语句,可以跳到你想要的位置。 前提是你得有一个标签,标签放到语句前,然后用goto 标签,就可以跳过去了
回复

使用道具 举报

18#
ID:884042 发表于 2021-3-30 19:13 | 只看该作者
1051798957 发表于 2021-3-28 16:21
含义,goto语句也称为无条件转移语句;goto语句的语义是改变程序流向, 转去执行语句标号所标识的语句;got ...

谢谢!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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