大家一直强调的是能不用尽量不用,但是goto语句确实有他的一个优势,最典型的就是: 高效的跳转方式。
int Function(void){if(x) goto ERROR;if(xx)goto ERROR;//... ...return 1;ERROR: XXX.Close(); return 0;}像这种跳转到错误处是goto最常见的用法,还有就是在多层循环嵌套中,跳出循环用goto就比较方便,而如果用break、return则需要执行好几次。
当然对于goto有这些优势为啥还尽量少用了,其实最主要的就是他的跳转方便,如果较多地方使用的话,容易造成逻辑混乱(跳来跳去容易把自己绕晕)。
因此小项目用用还好,大项目的话还是尽量别用。
在其他的帖子上有找到使用goto语句的潜在风险:
1.破坏结构化,易读性差,内存中断次数陡增降低执行速度
2.goto是汇编孑遗。在C里不恰当的使用goto会破坏逻辑的完整性,增加跑飞的风险,有一个很关键的原因是因为现在编译器已经能很好的对循环进行优化,循环内部的goto语句会让优化很难控制。
链接: 该帖子下的评论.