關於編譯器提示a declaration cannot have a label的解決方法
阿新 • • 發佈:2019-01-09
最近在程式設計時遇到這樣的一個問題,我在case 下面定義一個變數,然而程式在編譯的時候報警,發現編譯器提示a declaration cannot have a label ,問題程式碼如下所示:
switch(msg)
{
case XXX:
uint8_t i = 0;
.....
break;
.....
}
上網查了一下資料得知在C語言中標籤的下一條語句不能是定義變數的表示式,而case恰好就是標籤,所以說出現這種情況也是比較正常的。知道了原因之後那麼解決方法就多了,我可以在switch前就定義這個變數,程式碼如下所示:
uint8_t i = 0;
switch(msg)
{
case XXX:
.....
break;
.....
}
或者我在case後加入複合語句,程式碼如下所示:
switch(msg)
{
case XXX:
{
uint8_t i = 0;
.....
break;
}
.....
}
又或者是在case XXX:後加一個分號:
switch(msg)
{
case XXX:
;
uint8_t i = 0 ;
.....
break;
.....
}