C语言关键字 - 浪里白条:goto
2012-01-19 15:45
190 查看
++++++++++++++++++++++++++++++++++++++++++
《C语言深入理解系列 - 浪里白条:goto》
查看其它博文请关注原创作者。
本文系本站原创,欢迎转载! 转载请注明出处:
/article/1433062.html
++++++++++++++++++++++++++++++++++++++++++
浪里白条:goto
描述:在所有的编程语言里,恐怕没有哪个关键字可以和goto相比,它可以指哪打哪,完全不用去顾忌编码规则,在代码世界里游刃有余,混得代码海洋里的浪里白条美誉,也正是由于其放荡不羁的特性,被编码规则牢牢划死在编程准则不允许之首。
作用:正如其名,go to everywhere,它可以在代码逻辑中任意穿梭,只要给我定义一个靶心(标签),我就可以打破逻辑直接到达,如下面示例。
if(网卡未初始化){ // 初始化网卡 if(初始化出错) goto error; } char * buf = (char*)malloc(20); if(接受网卡数据){ if(数据较验错误) goto checkNumError; //写入到buf中 }else{ goto timeupError; } checkNumError: // 处理较验出错 goto freeMem; timeupError: // 处理超时出错 freeMem: free(buf); error: // 其它善后处理
通过上面的代码可以看出,使用goto关键字,程序逻辑非常的自由,网卡初始化出错时,直接跳到23行执行,第9行,数据较验出错,直接跳到16行,然后处理完后跳到21行,执行buf的内存释放。虽然可以看到代码逻辑很自由,但是还是会发现有点混乱,如果程序员没有足够的代码经验,很容易出现逻辑问题,因此很多派系的编码规范中规定,禁止或尽量不使用goto关键字,很容易让程序员范迷糊。但是在很多场合下,使用goto关键字可以更方便快捷,比如:错误处理时,其实上面的例子就是一个简单的驱动错误处理例子。
使用goto时,请注意:
标签后面的代码会被依次执行,如上述代码18行,如果不使用goto,那么就会去执行19行后面的错误处理代码了。
在含有大量goto语句时,应该按照“先跳后出”的准则去设计逻辑,因为通常在标签处要做一些前面逻辑处理,越在前面声明的变量或内存空间,越应该在最后去释放,如前面的例子。其大概逻辑如下比如:
goto error: …… goto checkNumError: …… goto timeupError: …… timeupError: …… checkNumError: …… error: ……
++++++++++++++++++++++++++++++++++++++++++
《C语言深入理解系列 - 浪里白条:goto》
查看其它博文请关注原创作者。
本文系本站原创,欢迎转载! 转载请注明出处:
/article/1433062.html
++++++++++++++++++++++++++++++++++++++++++
相关文章推荐
- C语言关键字 - 浪里白条:goto
- C语言关键字 - 浪里白条:goto
- C语言关键字 - 浪里白条:goto
- 能在catch块中使用goto跳回try块么?
- LCC编译器的源程序分析(39)goto语句
- 被遗忘的技术--PHP中的GOTO声明
- 关于goto语句能不能从复杂的嵌套循环判断中跳出去的问题讨论
- GOTO PHP5 LIST 1
- c语言关键字收集
- 关于goto的使用
- Goto 桌面搜索 插件的使用
- Visual Studio 2010 cannot goto definition
- goto语句
- 常见分页步骤: Total: ? Page: ?/? Goto: ? | >|
- delphi中goto的用法
- c语言关键字 continue
- 如何写优雅的代码(1)——灵活使用goto和__try:评论反馈
- Framework、for与foreach、DirectoryInfo类、break和goto、文件处理类
- C语言关键字 - 乱世枭雄:static与extern
- break的特殊用法(可以实现goto的功能);递归的基础