do{...}while(0)的意義和用法
阿新 • • 發佈:2021-10-14
合理使用
do { }while(0);
可以代替goto語句。
有些函式中,在函式return之前我們經常會進行一些收尾的工作,比如free掉一塊函式開始malloc的記憶體,goto一直都是一個比較簡便的方法:
int foo() { somestruct* ptr = malloc(...); dosomething...; if(error) { goto END; } dosomething...; if(error) { goto END; } dosomething...; END:free(ptr); return 0; }
由於goto不符合軟體工程的結構化,而且有可能使得程式碼難懂,所以很多人都不倡導使用,那這個時候就可以用do{}while(0)來進行統一的管理:
int foo() { somestruct* ptr = malloc(...); do{ dosomething...; if(error) { break; } dosomething...; if(error) {break; } dosomething...; }while(0); free(ptr); return 0; }
這裡將函式主體使用do()while(0)包含起來,使用break來代替goto,後續的處理工作在while之後,就能夠達到同樣的效果。
完整版轉自http://www.spongeliu.com/415.html