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