下面是,林锐在《C语言深度解剖》中的一段:
一般来说,编码的水平与goto 语句使用的次数成反比。有的人主张慎用但不禁用goto
语句,但我主张禁用。关于goto 语句的更多讨论可以参看Steve McConnell 的名著《Code
Complete. Second Edition》。
【规则1-32】禁用goto 语句。
自从提倡结构化设计以来,goto 就成了有争议的语句。首先,由于goto 语句可以灵活
跳转,如果不加限制,它的确会破坏结构化设计风格;其次,goto 语句经常带来错误或隐
患。它可能跳过了变量的初始化、重要的计算等语句,例如:
struct student *p = NULL;
…
goto state;
p = (struct student *)malloc(…); //被goto 跳过,没有初始化
⋯
state:
//使用p 指向的内存里的值的代码
⋯
如果编译器不能发觉此类错误,每用一次goto 语句都可能留下隐患。
|