C语言常见问题(11):a label can only be part of a statement and a declaration is not a statement

Posted 太阳德生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言常见问题(11):a label can only be part of a statement and a declaration is not a statement相关的知识,希望对你有一定的参考价值。

a label can only be part of a statement and a declaration is not a statement 【 标签只能是语句的一部分,而声明不是语句】

       由于switch的几个case语句在同一个作用域(因为case 语句只是标签,它们共属于一个swtich语句块),所以如果在某个case下面声明变量的话,对象的作用域是在俩个花括号之间 也就是整个switch语句,其他的case语句也能看到,这样的话就可能导致错误。我们可以通过在case后面的语句加上大括号处理,之所以加大括号就是为了明确我们声明的变量的作用域,就是仅仅在本case之中,其实为了更规范的写switch-case语句,我们应该在case语句后边加大括号。

两种解决办法:

方法1:在case下面的语句全部用 括起来;

      case MiddleAlgoCmd_BLE_PAIR_ACTION:
        
          uint8_t *sendData;
          sendData = rec_msg.data;
          ROBOT_LOG_INFO("########cmd MiddleAlgoCmd_BLE_PAIR_ACTION#####\\r\\n");
          ROBOT_LOG_INFO("########cmd MiddleAlgoCmd_BLE_PAIR_ACTION rec_msg.data_len=%d\\r\\n", rec_msg.data_len);
          ROBOT_LOG_INFO("########cmd MiddleAlgoCmd_BLE_PAIR_ACTION type=%d\\r\\n", ((char *)rec_msg.data)[0]);
          ROBOT_LOG_INFO("########cmd MiddleAlgoCmd_BLE_PAIR_ACTION type2=%d\\r\\n", sendData[0]);
          packet_fun_set_cookie_sign_status(sendData[0], 0, 0);  // 需要确认参数
          break;
          

方法2:前面加个打印语句,就不是一开始就是声明,也能过;

最好的处理方式还是方法1.

以上是关于C语言常见问题(11):a label can only be part of a statement and a declaration is not a statement的主要内容,如果未能解决你的问题,请参考以下文章

C语言常见问题(11):a label can only be part of a statement and a declaration is not a statement

C语言实现CAN总线报文传送与接收

Python3报错处理:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: o

error: a label can only be part of a statement and a declaration is not a statement

c语言04

eclipse编译动态链接库文件报错 relocation R_X86_64_32 against `.data' can not be used when making a shared o