当前位置:天才代写 > tutorial > C语言/C++ 教程 > do {…} while (0) 的常见用途

do {…} while (0) 的常见用途

2017-11-01 08:00 星期三 所属: C语言/C++ 教程 浏览:56

在一些Linux内核和其它的开源代码中,我们常常看到像下面这样的代码:

do{  
 ...  
}while(0)

该代码片断并非轮回,这样想想好像利用do…while没有任何意义,那么为什么还要利用它呢?

实际上,do{…}while(0)的用途并不只仅是优化你的代码。颠末一系列的调研和摸索,我们总结出它的一些用途如下。

1. 辅佐界说巨大的宏以制止错误

具体表明请看“do {…} while (0) 在宏界说中的浸染”,报告了如何操作do {…} while (0) 办理常犯的宏界说错误,让各人不再恐惊宏。

2. 制止利用goto节制措施流

在一些函数中,我们在return语句之前大概需要做一些事情,好比释放在函数一开始由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,代码的可读性加强了。

3. 制止由宏引起的告诫

由于内核差异体系布局的限制,我们大概需要多次利用空宏。在编译的时候,这些空宏会发生告诫,为了制止这种告诫,我们可以利用do{…}while(0)来界说空宏:

#define EMPTYMICRO do{}while(0)

这样在编译的时候就不会发生告诫。

4. 界说单一的函数块来完成巨大的操纵

假如你有一个巨大的函数且你不想要建设新的函数,那么利用do{…}while(0),你可以将一些代码放在这内里并界说一些变量,这样你就不必担忧do{…}while(0)外面的变量名是否与do{…}while(0)内里的变量名沟通造成反复了。

假如你发明do{…}while(0)其它的好用途,请与我们分享哦!

From:csdn博客 lanxuezaipiao

 

    关键字:


天才代写-代写联系方式