"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 标签。
我试图使用 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 标签。