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
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
eclipse编译动态链接库文件报错 relocation R_X86_64_32 against `.data' can not be used when making a shared o