上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.12 goto/continue/break语句
自从提倡结构化程序设计以来,goto就成了有争议的语句。首先,由于goto语句可以实现无条件跳转,如果不加限制,它的确会破坏结构化程序设计风格。其次,goto语句经常带来错误和隐患。它可能跳过某些对象的构造、变量的初始化、重要的计算等语句,如示例4-16所示。
示例4-16
goto state; String s1,s2; // 被goto跳过 int sum=0; // 被goto跳过 … state: …
如果编译器不能发觉此类错误,每用一次goto语句都可能留下隐患。
很多人建议废除C++/C的goto语句,以绝后患。但老实说,错误是程序员自己造成的,不是goto的过错。(你不用它,难道它还会跳出来骚扰你不成?)goto语句至少有一处可显神通,它能从多层嵌套的循环体中“嗖”地一下子跳到外面,用不着写很多次的break语句,从而提高了效率,见示例4-17。
示例4-17
for(…) {… for(…) {… for(…) {… goto error; } } } error:// 错误处理代码
所以我们主张少用、慎用goto语句,而不是禁用。