• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

goto out 在单片机常用吗,在哪里会用到

0e88bb35697e2bc5 2018-11-25 浏览量:1280
goto out 在单片机常用吗,在哪里会用到
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • C语言没有goto out

    只有goto语句——无条件跳转

    后面的out是程序员自己定义的标号。


    goto语句因为打乱程序流程,使用不当会产生很多后果,所以要慎用(在没完全理解它之前,千万别用)。

    在HAL库中,不少位置使用到goto语句。比如“stm32f1xx_hal_spi.c”里,截取片段供学习

    HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi uint8_t *pData uint16_t Size uint32_t Timeout)
    {
      uint32_t tickstart = 0U;
      HAL_StatusTypeDef errorcode = HAL_OK;
    
      /* Process Locked */
      __HAL_LOCK(hspi);
    
      /* Init tickstart for timeout management*/
      tickstart = HAL_GetTick();
    
      if(hspi->State != HAL_SPI_STATE_READY)
      {
        errorcode = HAL_BUSY;
        goto error;           //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      }
    
      if((pData == NULL ) || (Size == 0U))
      {
        errorcode = HAL_ERROR;
        goto error;           //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      }
    
      //..略
      while (hspi->TxXferCount > 0U)
      {
        /* Wait until TXE flag is set to send data */
        if(__HAL_SPI_GET_FLAG(hspi SPI_FLAG_TXE))
        {
          *((__IO uint8_t*)&hspi->Instance->DR) = (*pData);
          pData += sizeof(uint8_t);
          hspi->TxXferCount--;
        }
        else
        {
          /* Timeout management */
          if((Timeout == 0U) || ((Timeout != HAL_MAX_DELAY) && ((HAL_GetTick()-tickstart) >=  Timeout)))
          {
            errorcode = HAL_TIMEOUT;
            goto error;                   //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
          }
        }
      }
    
      //..略
      if(hspi->ErrorCode != HAL_SPI_ERROR_NONE)
      {
        errorcode = HAL_ERROR;
      }
    
    error:                              //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      hspi->State = HAL_SPI_STATE_READY;
      /* Process Unlocked */
      __HAL_UNLOCK(hspi);
      return errorcode;
    }

    • 发布于 2018-11-25
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:11
  • goto 在驱动里面用的多,主要是在 probe 里面用的很多,但是仅仅局限于 probe 内 goto ,不会跨函数 goto,goto 是个不建议使用的语句

    out 不懂

    • 发布于2018-11-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个程序员禁用的语句哦,C中就是个不稳定因素!
    • 发布于2018-11-25
    • 举报
    • 评论 0
    • 0
    • 0

  • goto是直接跳转语句,能在同一个函数里面跳转,但是现在很少用,
    • 发布于2018-11-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 建议不要随便用goto语句,尤其是单片机,有可能导致系统崩溃的
    • 发布于2018-11-25
    • 举报
    • 评论 0
    • 0
    • 0

  • goto语法在c语言中是不安全的,不能随便乱用,直接用最普通的函数跳转是最好的。
    • 发布于2018-11-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 没有goto out这个语法吧

    应该是goto语句,这是一个跳转的关键字,out是goto可以识别的一个关键字段,使用这个语句的话会跳转到out字段之后执行,这个语句具有很高的危险性,所以一般情况是禁止使用的,如果程序不是很复杂的话可以使用,复杂程序不建议使用,这样可读性很差,一般都是使用while和for语句进行代替的。

    • 发布于2018-11-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 没有goto out吧,只有goto语句,一般用于跳出多重循环,单片机应用中因为一般不涉及那么复杂的语句,所以尽量不要用。
    • 发布于2018-11-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 记得似乎只有跳出语句GOTO
    • 发布于2018-11-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 转跳语句,在系统的内核才会使用到
    • 发布于2018-12-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 是goto语句,现在一般的系统都是不会使用这个语句的
    • 发布于2019-01-07
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

goto out 在单片机常用吗,在哪里会用到