"error: duplicate case value" error when using goto in switch statement

"error: duplicate case value" error when using goto in switch statement

我试图使用 goto 语句在不同的 switch-cases 之间穿梭。我明白,使用 goto 并不可取,因为它会使程序难以理解,但我确实需要它。

这是我的代码的示例版本:

switch(something){
    case "c1":
        //some code
        break;
    case "c2":
       //some code
       break;
    case "c3":
        if(condition1)
            goto case "c1";
        if(condition2)
            goto case "c2";
    default:
        break;
}

现在,当我 运行 代码时,我得到以下错误 error: duplicate case value,它适用于 goto case "c1"goto case "c2"

我不确定为什么编译器认为 switch-case 上的 goto 正在 switch 语句中使用相同条件重新定义另一个 case 并因此抛出重复错误.感谢您提供此错误的任何帮助和原因。

谢谢!

在任何情况下,switch 语句都没有意义,因为您使用的是字符串文字作为大小写标签。

switch(something){
    case "c1":
        //some code
        break;
    case "c2":
       //some code
       break;
    case "c3":
        if(condition1)
            goto case "c1";
        if(condition2)
            goto case "c2";
    default:
        break;
}

switch 语句中的表达式被转换为整数或枚举类型,无法隐式转换为指针或字符串文字。

例如您可能需要使用字符文字

case 'c1':

第二个问题是您不能在 goto 语句中使用 case 标签。您只能将作为标识符显示的标签与 goto 语句一起使用。 goto语句的语法是

goto identifier ;

因此编译器认为 goto 语句中使用的 case 标签重新定义了已经引入的 case 标签。