C语言视频 VS2015:[19]goto label
VisualStudio 2015的发布,跟随而来的相关的教程的苯侈忏帘空白,这里讲逐步在VisualStudio 2015呼鳏魇杰上讲解C语言相关的系列视频教程经验(注:由于视频修改难度大,所以先暂时发布文档,视频后期逐步补上),本文主要涉及:①label的命名规则和使用原则;②goto语句的使用方法;③goto语句的缺陷进行举证;
工具/原料
Visual Studio 2015
Windows 8.1 x64
label
1、label命名是语句命名的一部分,label定义需要跟随一个冒号”:“,但不是标号(纯数字label)的一部分,label在使用的时候紧紧的跟在goto关键词的后面,label的名称在不同的函数间是可以重名的;
![C语言视频 VS2015:[19]goto label](https://exp-picture.cdn.bcebos.com/64a62a0f6478142300e9528daac2bbd6e0d0b2e7.jpg)
3、下图是 label名在同一个函数中重名时编译器报错的情况;说明:label在同一个函数中不能够重名;
![C语言视频 VS2015:[19]goto label](https://exp-picture.cdn.bcebos.com/cfa9ae04541bd10f39762929ba0e1799e82aa7e7.jpg)
5、下图是使用纯数字作为label时,编译器报错的情况;说明:label不予许使用纯数字来命名;
![C语言视频 VS2015:[19]goto label](https://exp-picture.cdn.bcebos.com/4080a927ac5306884b7c817957e8904801fc96e7.jpg)
2、下图是goto语句的最简撮劝丛食单的用法,程序一开始,goto到了labelA,然后直接跳过了语句:printf("label can泌驾台佐39;t throught here.\n");,继续执行labelA处的语句:printf("label will throught here.\n");的效果图
![C语言视频 VS2015:[19]goto label](https://exp-picture.cdn.bcebos.com/8974c38a59de450765511cc35e413a8ca70885e7.jpg)
4、label仅仅对goto语句有意义,在其他的任何上下文中,label语句是不会被执行的,如下图所示,通过汇编的形式,可以看到,label出的汇编代码就不存在;
![C语言视频 VS2015:[19]goto label](https://exp-picture.cdn.bcebos.com/2e66f9ef28066b016d8d17f33df39187021cf3e7.jpg)
2、原因在于:①程序一开始便直接跳转到了 labelA处;②导致 int Value = 100;这一行并没有执行;③ nValue在内存中是不存在的;④当执行 printf的时候,当调用 nValue的时候,就出现了内存越界;
3、正是由于上述的缺陷的存在,所以msdn也建议:一个号的程序风格是在能够使用 break,continue,return代替goto的地方,尽量使用break,continue,r髫潋啜缅eturn代替goto语句,由于break语句只能够跳出一层循环,所以在深度循环的时候,可能跟需要goto语句,如下图msdn上面的例子:
![C语言视频 VS2015:[19]goto label](https://exp-picture.cdn.bcebos.com/e0c73a2fa872941fb4b510697b5e4a237871e6e7.jpg)
4、方便他人亦是方便自己,如果觉得还行就点下下边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!
![C语言视频 VS2015:[19]goto label](https://exp-picture.cdn.bcebos.com/03f26bd7997bbbf4c00956695549610f8a56d6e7.jpg)