C语言goto关键字

C语言goto关键字

写的挺生动的文章,本文系本站原创,欢迎转载! 转载请注明出处:

http://blog.csdn.net/mr_raptor/article/details/7211005 

浪里白条:goto

描述:在所有的编程语言里,恐怕没有哪个关键字可以和goto相比,它可以指哪打哪,完全不用去顾忌编码规则,在代码世界里游刃有余,混得代码海洋里的浪里白条美誉,也正是由于其放荡不羁的特性,被编码规则牢牢划死在编程准则不允许之首。

作用:正如其名,go to everywhere,它可以在代码逻辑中任意穿梭,只要给我定义一个靶心(标签),我就可以打破逻辑直接到达,如下面示例。

[cpp]  view plain copy
  1. if(网卡未初始化){  
  2.     // 初始化网卡  
  3. if(初始化出错)  
  4.     goto error;  
  5. }  
  6.   
  7. char * buf = (char*)malloc(20);  
  8. if(接受网卡数据){  
  9.     if(数据较验错误)  
  10.         goto checkNumError;   
  11.     //写入到buf中   
  12. }else{  
  13.     goto  timeupError;  
  14. }  
  15.   
  16. checkNumError:  
  17.     // 处理较验出错  
  18.     goto freeMem;  
  19. timeupError:  
  20.     // 处理超时出错  
  21. freeMem:  
  22.     free(buf);  
  23. error:  
  24.     // 其它善后处理  

通过上面的代码可以看出,使用goto关键字,程序逻辑非常的自由,网卡初始化出错时,直接跳到23行执行,第9行,数据较验出错,直接跳到16行,然后处理完后跳到21行,执行buf的内存释放。虽然可以看到代码逻辑很自由,但是还是会发现有点混乱,如果程序员没有足够的代码经验,很容易出现逻辑问题,因此很多派系的编码规范中规定,禁止或尽量不使用goto关键字,很容易让程序员范迷糊。但是在很多场合下,使用goto关键字可以更方便快捷,比如:错误处理时,其实上面的例子就是一个简单的驱动错误处理例子。

使用goto时,请注意:

  •  标签后面的代码会被依次执行,如上述代码18行,如果不使用goto,那么就会去执行19行后面的错误处理代码了。
  • 在含有大量goto语句时,应该按照“先跳后出”的准则去设计逻辑,因为通常在标签处要做一些前面逻辑处理,越在前面声明的变量或内存空间,越应该在最后去释放,如前面的例子。其大概逻辑如下比如:
[cpp]  view plain copy
  1. goto error:  
  2. ……  
  3. goto checkNumError:  
  4. ……  
  5. goto timeupError:  
  6. ……  
  7.   
  8. timeupError:  
  9. ……  
  10. checkNumError:  
  11. ……  
  12. error:  
  13. ……  

待续。。。。。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值