zoukankan      html  css  js  c++  java
  • C语言中do...while(0)的妙用-避免goto

    使用goto的优雅并避免结构的混乱
    将要跳转到的语句用do{…}while(0) 包起来就可以。


    reference

     #defien N 10
    
     bool Execute()
     {
        // 分配资源
        int *p = (int *)malloc(N * sizeof(int));
        bool bOk = true;
    
        // 运行并进行错误处理
        bOk = func1();
        if(!bOk) 
        {
           free(p);   
           p = NULL;
           return false;
        }
    
        bOk = func2();
        if(!bOk) 
        {
           free(p);   
           p = NULL;
           return false;
        }
    
        bOk = func3();
        if(!bOk) 
        {
           free(p);    
           p = NULL;
           return false;
        }
    
        // ..........
    
        // 运行成功,释放资源并返回
         free(p);   
         p = NULL;
         return true;
     }
    #defien N 10
    
     bool Execute()
     {
        // 分配资源
        int *p = (int *)malloc(N * sizeof(int));
        bool bOk = true;
    
        // 运行并进行错误处理
        bOk = func1();
        if(!bOk) goto errorhandle;
    
        bOk = func2();
        if(!bOk) goto errorhandle;
    
        bOk = func3();
        if(!bOk) goto errorhandle;
    
        // ..........
    
        // 运行成功,释放资源并返回
         free(p);   
         p = NULL;
         return true;
    
         errorhandle:
         free(p);   
         p = NULL;
         return false; 
     }
    #defien N 10
    
     bool Execute()
     {
         //分配资源
         int *p = (int *)malloc(N * sizeof(int));
         bool bOK = true;
    
    
         do {
             //运行并进行错误处理
             bOK = fun1();
             if(!bOK) break;
    
             bOK = fun2();
             if(!bOK) break;
    
             bOK = fun3();
             if(!bOK) break;
    
             //.........
         }  while(0);
    
         //释放资源
    
         free(p);
         p = NULL;
         return bOK;
     }
  • 相关阅读:
    linux top详解
    软件人才必须具备的素质
    合格程序员每天每周每月每年应该做的事
    正则匹配任意字符(包括换行)
    软件测试方案
    LInux进程间的通信方式有哪儿些?
    三网融合
    php路径问题
    xp 安装SATA AHCI驱动
    进程与线程的区别
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7348074.html
Copyright © 2011-2022 走看看