在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 }