如果条件由switch和goto覆盖

时间:2017-06-12 12:50:10

标签: c

在下面的代码中,if语句会覆盖goto条件,在后续版本中,if中的switch条件也会被覆盖。请解释为什么gotoswitch正在执行此操作,并且有条件将条件放在gotoswitch内。

int main()
{
    int x=3;
    goto LABEL;

    if(x < 0) {
        LABEL: printf("Label executed");
    }

    printf("\nEND MAIN");
    return 0; 
}

输出:

Label executed
END MAIN
int main()
{  
    int x = 2, y = -5;

    switch(x)
    {   if( y > 0)
        {   case 1:
                printf("case 1");
                break;
            case 2:
                printf("\n case 2");
                break;        
        } 
        case 3:
            printf("\n case 3");
            break;
        default :
            printf("\n Exit switch");  
     }
}

输出:

case 2

1 个答案:

答案 0 :(得分:2)

goto跳到这一行:

LABEL: printf("Label executed");

忽略if语句及其条件,这解释了输出。

switch/case只是一个花哨的goto,因此switch(x)x = 2将转到案例2,忽略if语句,它解释了输出。

PS:goto可以导致意大利面条代码,因此被认为是编程的黑羊。建议不要使用它,除非你真的必须这样做。阅读What is wrong with using goto?

中的更多内容