keil C 没有goto语句的?

2020-01-23 14:32发布

如题,求解
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
79条回答
NowCan
1楼-- · 2020-01-24 15:43
那不一定,有很多是为了高效。
snoopyzz
2楼-- · 2020-01-24 21:27
goto安全的用法
1. 跳出多层循环
2. 跳到统一的函数结尾处返回(适用return需要做相同处理的情况)


其它时候,不用也罢,基本没有不能用do{break;}while(0); 或者inline函数中return代替的情况
flyhouse
3楼-- · 2020-01-25 01:10
 精彩回答 2  元偷偷看……
NJ8888
4楼-- · 2020-01-25 03:39
下面是美国人写的代码

static int csmsh_setserialnum()
{
  char buff[(OEMCFGBASESIZE_SERIAL_NUM*2)+1];
  unsigned int bufflen = (OEMCFGBASESIZE_SERIAL_NUM*2);
  int tmpret = 0;

  buff[(OEMCFGBASESIZE_SERIAL_NUM*2)] = 0x0;

  csmsh_macops->dbg.prompt_string_ser("Enter sevice serial number string (80 chars max)",
                                      (char*)buff, &bufflen);
  /* bounds check user input */
  if(bufflen < 1)
  {
    csmsh_macops->dbg.pr_ser("ERROR: no user input ");
    goto done_exit;
  }
  /* output what the user typed */
  csmsh_macops->dbg.pr_ser("%d chars, data->%s<- ", bufflen, buff);

  /* now call the generic usb string descriptor write function */
  tmpret = csmsh_macops->oemcfg.wrusbstrdesc(OEMCFGBASE_SERIAL_NUM, buff, bufflen);
  if(tmpret != 0)
  {
    csmsh_macops->dbg.pr_ser("ERROR: failed to write string to oem cfg, macerrno = 0x%X ",
                             macerrno);
    goto done_exit;
  }
done_exit:
  return 0;
}
alengend
5楼-- · 2020-01-25 09:39
我感觉应该具体问题具体分析,有些场合,可以谨慎的用一下。
Joyway
6楼-- · 2020-01-25 12:18
有呢,我经常用的,不过还是少用好

一周热门 更多>