C语言中do...while(0)的妙用-避免goto
程序员文章站
2022-03-23 20:07:51
使用goto的优雅并避免结构的混乱
将要跳转到的语句用do{…}while(0) 包起来即可。
reference
#defien N 10
bo...
使用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; }