程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言入門知識 >> C語言中do...while(0)的妙用

C語言中do...while(0)的妙用

編輯:C語言入門知識

使用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;
 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved