You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在switch语句中使用goto跳转case时报duplicate case value错误如何解决

错误产生原因

  • 该duplicate case value报错的核心原因是你使用的编译语言不支持goto case 目标case值语法。goto case是C#独有的switch内部跳转语法,如果你用C、C++等其他类C语言的编译器编译这段代码,编译器无法识别goto case组合关键字,会把代码拆分为独立语义解析:先处理goto关键字,再把后续的case "c1"识别为新的case分支定义,和你前面已经声明过的case "c1"冲突,就会触发重复case值的报错。
  • 额外说明:即便不考虑goto语法问题,C、C的switch语句本身就不支持字符串类型作为case判断值,仅支持整数、枚举、字符这类可转为整数的类型,如果你用C/C写这段代码,哪怕没有goto跳转逻辑,字符串形式的case标签本身也会触发编译错误。

替代实现方案

如果需要在C/C++中实现相同逻辑,可选择两种兼容写法:

  1. 抽离公共逻辑为独立函数,在需要跳转的位置直接调用
// 抽离各分支的公共处理逻辑
void handle_c1() {
    // 原c1分支的业务代码
}
void handle_c2() {
    // 原c2分支的业务代码
}

int main() {
    int something = 3;
    switch(something) {
        case 1:
            handle_c1();
            break;
        case 2:
            handle_c2();
            break;
        case 3:
            if(condition1) {
                handle_c1();
            } else if(condition2) {
                handle_c2();
            }
            break;
        default:
            break;
    }
    return 0;
}
  1. 如果一定要用goto实现跳转,给对应分支打自定义标签即可:
int main() {
    int something = 3;
    switch(something) {
        case 1:
            label_c1:
            // 原c1分支的业务代码
            break;
        case 2:
            label_c2:
            // 原c2分支的业务代码
            break;
        case 3:
            if(condition1) {
                goto label_c1;
            } else if(condition2) {
                goto label_c2;
            }
            break;
        default:
            break;
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Pranav Desai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:09:03