C语言视频 VS2015:[18]goto label

2025-12-02 06:08:57

1、label命名是语句命名的一部分,label定义需要跟随一个冒号”:“,但不是标号(纯数字label)的一部分,label在使用的时候紧紧的跟在goto关键词的后面,label的名称在不同的函数间是可以重名的;

C语言视频 VS2015:[18]goto label

2、下图是函数外使用label,编译器报错的情况;

说明:label只能够用在函数内

C语言视频 VS2015:[18]goto label

3、下图是 label名在同一个函数中重名时编译器报错的情况;

说明:label在同一个函数中不能够重名;

C语言视频 VS2015:[18]goto label

4、下图是 label名在不同的函数中重名时正常使用的情况;

说明:label在不同的函数中可以重名;

C语言视频 VS2015:[18]goto label

5、下图是使用纯数字作为label时,编译器报错的情况;

说明:label不予许使用纯数字来命名;

C语言视频 VS2015:[18]goto label

1、goto又称为强制跳转语句,下图是msdn对于goto语句的解释

C语言视频 VS2015:[18]goto label

2、下图是goto语句的最简单的用法,程序一开始,goto到了labelA,然后直接跳过了语句:printf("label can't throught here.\n"); ,继续执行labelA处的语句:printf("label will throught here.\n"); 的效果图

C语言视频 VS2015:[18]goto label

3、下图演示了goto和label不再一个函数中使用时编译器报错的情况;

说明:goto和label必须在一个函数内使用;

C语言视频 VS2015:[18]goto label

4、label仅仅对goto语句有意义,在其他的任何上下文中,label语句是不会被执行的,如下图所示,通过汇编的形式,可以看到,label出的汇编代码就不存在;

C语言视频 VS2015:[18]goto label

1、如下图所示的程序,当程序执行到了

printf 的时候会弹出如下的错误信息;

C语言视频 VS2015:[18]goto label

2、原因在于:

① 程序一开始便直接跳转到了 labelA 处;

② 导致 int Value = 100;这一行并没有执行;

③ nValue在内存中是不存在的;

④ 当执行 printf 的时候,当调用 nValue的时候,就出现了内存越界;

3、正是由于上述的缺陷的存在,所以msdn也建议:

一个号的程序风格是在能够使用 break,continue,return代替goto的地方,尽量使用break,continue,return代替goto语句,由于break语句只能够跳出一层循环,所以在深度循环的时候,可能跟需要goto语句,如下图msdn上面的例子:

C语言视频 VS2015:[18]goto label

C语言视频 VS2015:[18]goto label

4、方便他人亦是方便自己,如果觉得还行就点下下边投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!

C语言视频 VS2015:[18]goto label

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢