goto语句(转)

来源:互联网 发布:淘宝店铺怎样分类宝贝 编辑:程序博客网 时间:2024/06/18 05:16
goto无条件跳转语句,建议尽量少的使用,不符合结构化程序的设计思想。

语法形式:goto 语句标签  ;

要使用goto语句,必须在希望跳转的语句前面加上语句标签。语句标签就是标识符后面加冒号。包含这些标签的goto语句可以出现在同一个函数中的任何位置。
例1:     #include           int main(void)          {                       goto l1;                    l1:printf("%d",5);                      return 0;               }

例2:struct s *p=NULL;
  ...
  goto state;
  p=(struct s *)malloc(...);//被goto跳过,没有初始化
  ...
  state: ;
  ...

但是,当需要跳出多层嵌套的循环时,使用goto语句可能会非常合适。由于break语句只影响包围它的最内层循环,要想立即从深层嵌套的循环中推出只有一个办法,就是使用goto语句,如下例所示:
while(condition1)
 {
             while(condition2)
              {
                      while(condition3)
                      {
                             if(some disaster)
                             goto  quit;
                      }
              }
}
quit:  ;
想在这种情况下避免使用goto语句有两种方案。第一个方案是当你希望退出所有循环时设置一个状态标志,但这个标志在每个循环中都必须进行测试:
enum { EXIT, OK } status;
....
status = OK;
while(status == OK && condition1)
{
                 while(status == OK && condition2)
                  {
                          while(status == OK && condition3)
                          {
                                  if(some disaster)
                                   {
                                          status = EXIT;
                                           break;
                                     }
                             }
                   }
}
这个技巧能够实现退出所有循环的目的,但情况被弄得非常复杂。另一种方案是把所有的循环都放到一个单独的函数里面,当灾难降临到最内层的循环时,你可以使用return语句离开这个函数。
0 0
原创粉丝点击