1. 程式人生 > >關於編譯器提示a declaration cannot have a label的解決方法

關於編譯器提示a declaration cannot have a label的解決方法

最近在程式設計時遇到這樣的一個問題,我在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; ..... }