[分享]高手关于GOTO语句的精辟见解
我本人由于是搞单片机的, 常用汇编, 总是在指令里跳来跳去,
因此对于类似的跳转语句GOTO一向都不排斥(虽然我用高级语言时从没用过GOTO).
不过看了林博士的讲解, 令我对GOTO的理解又深了一层..实在获益匪浅.
摘自<<高质量C、C++编程指南>> 作者:林锐 博士
作者简介:
林锐,2000年获浙江大学计算机应用博士学位。大学期间两度被评为中国百名跨世纪优秀大学生,1996年获电子工业部科技进步二等奖,1997年获首届中国大学生电脑大赛软件展示一等奖。2000年7月加入上海贝尔有限公司,从事软件工程和CMM/CMMI研究与推广工作,出版著作三部,2003年7月当选为Alcatel集团技术委员会会员。2004年创建上海漫索计算机科技有限公司。
作者简介:
林锐,2000年获浙江大学计算机应用博士学位。大学期间两度被评为中国百名跨世纪优秀大学生,1996年获电子工业部科技进步二等奖,1997年获首届中国大学生电脑大赛软件展示一等奖。2000年7月加入上海贝尔有限公司,从事软件工程和CMM/CMMI研究与推广工作,出版著作三部,2003年7月当选为Alcatel集团技术委员会会员。2004年创建上海漫索计算机科技有限公司。
自从提倡结构化设计以来,goto 就成了有争议的语句。首先,由于goto 语句可以
灵活跳转,如果不加限制,它的确会破坏结构化设计风格。其次,goto 语句经常带来错
误或隐患。它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句,例如:
goto state;
String s1, s2; // 被goto 跳过
int sum = 0; // 被goto 跳过
…
state:
…
如果编译器不能发觉此类错误,每用一次goto 语句都可能留下隐患。
很多人建议废除C++/C 的goto 语句,以绝后患。但实事求是地说,错误是程序员自
己造成的,不是goto 的过错。goto 语句至少有一处可显神通,它能从多重循环体中咻
地一下子跳到外面,用不着写很多次的break 语句; 例如
{ …
{ …
{ …
goto error;
}
}
}
error:
…
就象楼房着火了,来不及从楼梯一级一级往下走,可从窗口跳出火坑。所以我们主
张少用、慎用goto 语句,而不是禁用。
灵活跳转,如果不加限制,它的确会破坏结构化设计风格。其次,goto 语句经常带来错
误或隐患。它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句,例如:
goto state;
String s1, s2; // 被goto 跳过
int sum = 0; // 被goto 跳过
…
state:
…
如果编译器不能发觉此类错误,每用一次goto 语句都可能留下隐患。
很多人建议废除C++/C 的goto 语句,以绝后患。但实事求是地说,错误是程序员自
己造成的,不是goto 的过错。goto 语句至少有一处可显神通,它能从多重循环体中咻
地一下子跳到外面,用不着写很多次的break 语句; 例如
{ …
{ …
{ …
goto error;
}
}
}
error:
…
就象楼房着火了,来不及从楼梯一级一级往下走,可从窗口跳出火坑。所以我们主
张少用、慎用goto 语句,而不是禁用。
[此贴子已经被作者于2007-6-17 10:47:31编辑过]