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;
    }
  • 相关阅读:
    Could not find the Qt platform plugin windows错误解决方法
    解决MySQL 8.0数据库出现乱码的问题
    C# Winform程序设计运行在高分屏下模糊解决办法
    如何配置SQL Server数据库远程连接
    PyCharm安装及使用教程
    Chrome谷歌浏览器实用插件
    Visual Studio 2017中如何创建安装打包项目
    Python如何打包EXE可执行文件
    C#中控制线程池的执行顺序
    .net core 部署在Centos 7/8 的几个小坑
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/10759045.html
Copyright © 2011-2022 走看看