C 如果条件通过开关和goto超越
在下面的代码中,C 如果条件通过开关和goto超越,c,C,在下面的代码中,if条件被goto语句覆盖,在随后的代码中,开关中的if条件也被覆盖。请解释为什么goto和switch会这样做,以及是否有办法在goto和switch内部设置条件 int main() { int x=3; goto LABEL; if(x < 0) { LABEL: printf("Label executed"); } printf("\nEND MAIN"); return 0; } 输出:
if
条件被goto
语句覆盖,在随后的代码中,开关中的if
条件也被覆盖。请解释为什么goto
和switch
会这样做,以及是否有办法在goto
和switch
内部设置条件
int main()
{
int x=3;
goto LABEL;
if(x < 0) {
LABEL: printf("Label executed");
}
printf("\nEND MAIN");
return 0;
}
输出:
Label executed
END MAIN
case 2
跳到此行:
LABEL: printf("Label executed");
忽略if语句及其条件,这将解释输出
switch/case
只是一个花哨的goto
,因此switch(x)
,如果x=2
,将转到案例2,忽略解释输出的if语句
PS:goto可能会产生意大利面代码,因此被认为是编程的害群之马。建议不要使用它,除非你真的必须这样做。阅读中的更多内容请阅读a以了解gotoMaybe等基本概念。如果您想离开1960ies/70ies,学习结构化编程。意大利面条放在盘子里加上好的酱汁就可以了,但在编程中就不行了。C提供循环语句以避免编写如此糟糕的代码。基本上这是对goto的滥用。虽然C有解决问题的规则,但除了编译器编写者或困惑的C竞赛参赛者之外,它们对任何人都无关紧要。不要跳入if块或将if块放入开关盒中。这一切归结为:请不要从外部来源随机获取一段代码,并要求stackoverflow为您解释它。取而代之的是,从有解释的例子中学习,这样你就可以自己理解它们。一旦你学会了基础知识,你可以在这里问一些具体的问题,但请一次问一个问题,而不是一次问多个问题。@cdarke:是的,我在80年代也用过它,在Apple BASIC和VIC64上也用过它,但主要是在我的汇编代码中(以跳转/分支指令的形式)。但我想你明白我的意思了:-)。谢谢你,阿马拉斯!所以我的观点是,有没有任何方法可以对goto@VishalRana-No.@VishalRana条件分支在C中称为if-else
语句,尽管C没有等价于汇编程序条件分支的语句。没有理由使用goto
。它几乎没有什么有效的用途,而且这些案例可以用更好的方式重写。多亏了@storyTellertoo@VishalRana很高兴其他用户在我吃午饭时帮助了你!=)既然你觉得这个答案很有帮助,我认为你应该接受它。
LABEL: printf("Label executed");