在语句前面加上标号主要是为了使用goto语句。goto语句的格式为 <标 其功能是打乱语句执行顺序,转去执行前面有指定标号的语句,而不管其是否排在当前 语句之后。C++的goto语句只能在本函数模块内部进行转移,不能由一个函数中转移到另 个函数中去。由于结构化程序设计方法主张尽量限制goto语句的使用范围,因此在这里不 对goto语句作过多的讨论,仅举一个例子说明在某些情况下使用goto语句可以简化程序设 计,同时又不明显地降低程序的可读性: while(<条件1>) f(<条件2>) goto OutLoop 上面这种程序结构当然也可以不用goto语句,而使用“纯粹”的结构化程序模块实现: while(<条件1>&&t≠0) f(<条件2>) else 但这段程序的可读性并不比使用goto语句时好多少(甚至可能更糟)结构也复杂多了, 还引入了一个辅助变量t。这说明,尽管按照结构化程序设计方法的说法滥用goto语句会 使程序的结构变坏,但在特殊情况下可能恰恰相反。何时应该使用goo语句,何时应该避免第 2 单元 控制结构 - 32 - 在语句前面加上标号主要是为了使用 goto 语句。goto 语句的格式为: goto <标号>; 其功能是打乱语句执行顺序, 转去执行前面有指定标号的语句, 而不管其是否排在当前 语句之后。C++的 goto 语句只能在本函数模块内部进行转移, 不能由一个函数中转移到另 一个函数中去。由于结构化程序设计方法主张尽量限制 goto 语句的使用范围, 因此在这里不 对 goto 语句作过多的讨论, 仅举一个例子说明在某些情况下使用 goto 语句可以简化程序设 计, 同时又不明显地降低程序的可读性: while (<条件 1>) { … … if(<条件 2>) goto OutLoop; … … } … … OutLoop: … … 上面这种程序结构当然也可以不用 goto 语句, 而使用“纯粹”的结构化程序模块实现: t = 1; while(<条件 1> && t≠0) { … … if(<条件 2>) t = 0; else { … … } } if(t≠0) { … … } OutLoop: … 但这段程序的可读性并不比使用 goto 语句时好多少 (甚至可能更糟), 结构也复杂多了, 还引入了一个辅助变量 t。这说明, 尽管按照结构化程序设计方法的说法滥用 goto 语句会 使程序的结构变坏, 但在特殊情况下可能恰恰相反。何时应该使用 goto 语句, 何时应该避免