標籤:article ref reference track mod www. 釋放 ide rac
使用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; }
C語言中do...while(0)的妙用-避免goto