1. 程式人生 > 其它 >do{...}while(0)的意義和用法

do{...}while(0)的意義和用法

合理使用

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