zoukankan      html  css  js  c++  java
  • C语言 goto语句

    /* goto语句 */
    #include <stdio.h> 
    #include <stdlib.h>
    #include <string.h>
    
    /*
    goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 
    放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
    
    */
    
    /*
    "但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。"
    所有goto说明都有类似提示,但是个人感觉goto还是很有用的
    
    */
    
    int handle(int num)
    {
        return num;
    }
    
    //goto基本用法
    void test1()
    {
        int errCode = 0;
    
        //业务1
        errCode = handle(1);
        if (errCode)
        {
            goto err;
        }
    
        //业务2
        errCode = handle(1);
        if (errCode)
        {
            goto err;
        }
    
        printf("-----ok----
    ");
    
        return;
    err:
        //资源释放处理
        printf("program is error .
    ");
    }
    
    /*
    goto作用域说明
    标签本身没有作用域的,只是一个标志点。
    但是goto本身有限制,只能是当前函数。所以,从这个角度来说,标签的作用域也可以说是当前函数。
    */
    void test2()
    {
         int errCode = 0;
    
         errCode = handle(1);
         if (errCode)
         {
             //goto err;   error C2094: 标签“err”未定义
         }
    }
    
    int main()
    {
        test2();
        printf("-----ok------
    ");
        getchar();
        return 0;
    }
    /* do{ ... }while(false)妙用  */
    #include <stdio.h> 
    #include <stdlib.h>
    #include <string.h>
    
    /*
    goto在函数有多个返回分支,部分或全部返回分支返回前需要做一些额外的工作(如释放内存等)场景很有作用
    但是goto是跳转,在c++编程中,如果变量定义在goto语句后面就会报错(变量未定义)
    do{ ... }while(false)就是一种取代goto的方法
    
    */
    
    int handle(int num)
    {
        return num;
    }
    
    //do while 使用
    int test1()
    {
        int errCode = 0;
    
        do 
        {
            //业务1
            errCode = handle(1);
            if (errCode)
            {
                break;
            }
    
            //业务2
            errCode = handle(1);
            if (errCode)
            {
                break;
            }
    
            //做需要执行的操作
    
        } while (0);
    
        //资源释放处理
    
        return errCode;
    
    }
    
    int main()
    {
        test1();
        printf("-----ok------
    ");
        getchar();
        return 0;
    }
  • 相关阅读:
    python中装饰器使用
    python文件读取操作、序列化
    Xshell使用教程
    Hadoop基础(三):基于Ubuntu16搭建Hadoop运行环境搭建
    UBUNTU的默认root密码是多少,修改root密码
    Ubuntu16.04设置静态ip
    Scala 基础(十六):泛型、类型约束-上界(Upper Bounds)/下界(lower bounds)、视图界定(View bounds)、上下文界定(Context bounds)、协变、逆变和不变
    物联网初探
    电脑不能安装虚拟机--解决办法
    vbox虚拟机和vm虚拟机 虚拟机网络不通的解决方法
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/10759045.html
Copyright © 2011-2022 走看看