4.9 大师如是说goto
goto语句是与语句标记(lable)一起使用的。C语言的语句标记一共有3种,其中一种的写法是:
标识符:
语句标记是用来标明源程序中语句的位置的,它被写在被标记语句(Labled Statement)开头处,供源程序指明一个语句的位置时使用。
任何语句都可以被标记,
尽管无聊,但不犯法。
通常需要指明语句位置的语句只有goto语句和switch语句,switch语句使用另外两种语句标记指明语句的位置。
goto语句的语法格式为:
goto语句标记的标识符;
其含义是指示程序跳转到被标记的语句处继续执行。
需要指出的是goto语句与被标记的语句必须在同一个函数之内。好在目前这个阶段接触到的代码都只有一个main(),以后有多个函数时也不再使用goto语句,所以这个问题提醒得似乎有些多余。
在编程的历史上,goto语句是唯一一个倍受攻击的语句,曾被认为是导致程序错误和混乱的根源之一。尽管有编程大师曾经指出,在特定的条件下,也不是绝对不可以使用goto语句,但稍有编程修养的人对这个语句都退避三舍、敬而远之,虽然他们口头上也不绝对地反对这个语句,但在编程行动中却绝对是杜绝goto语句的。
即使是C语言的发明者似乎也对C语言中存在goto语句感到不安和后悔。C语言的发明者Kernighan和Ritchie在他们的名著《C Programming Language》中介绍了关于goto语句的语法之后,含蓄地说了一句:“在本书中我们没有使用goto语句(We have not used goto in this book)。”
Kernighan和Ritchie在他们的著作中坦率地承认goto语句的存在不是必要的“(the goto is never necessary”)。事实上,goto语句的功能完全可以通过其他语句实现,在C语言基础上衍化出的java语言就废除了goto语句。
为了你的编程修养不至于因为被人误解而遭到轻视计,本书对goto语句的讲解到此为止,后面的任何示例代码中也不使用goto语句。我们不妨一起假装goto语句根本不存在好了。
本节真正的重点是,在代码中可以标记语句开头的位置,标记的方法总离不开一个“:”,此外需要知道的就是goto也是一个C语言的关键字,不要用它为你代码中的任何对象命名。另外还需要了解的是标号这种标识符的有效区间只是在所在的函数范围之内。