高质量程序设计指南:C++/C语言
上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语句,而不是禁用。