在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个:

通常,如果一个函数开始要分配一些资源,然后如果在中途遇到错误则要退出函数,当然,退出前要释放资源,我们的代码可能如下: 

 1 #defien N 10
 2 
 3 bool Execute()
 4 {
 5    // 分配资源
 6    int *p = (int *)malloc(N * sizeof(int));
 7    bool bOk = true;
 8 
 9    // 执行并进行错误处理
10    bOk = func1();
11    if(!bOk) 
12    {
13       free(p);   
14       p = NULL;
15       return false;
16    }
17 
18    bOk = func2();
19    if(!bOk) 
20    {
21       free(p);   
22       p = NULL;
23       return false;
24    }
25 
26    bOk = func3();
27    if(!bOk) 
28    {
29       free(p);    
30       p = NULL;
31       return false;
32    }
33 
34    // ..........
35 
36    // 执行成功,释放资源并返回
37     free(p);   
38     p = NULL;
39     return true;
40 }
C代码

相关文章: