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

本文地址:http://www.cnblogs.com/archimedes/p/do-while-0.html,转载请注明源地址。

1、避免goto语句:

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

#defien N 10

bool Execute()
{
   // 分配资源
   int *p = (int *)malloc(N * sizeof(int));
   bool bOk = true;

   // 执行并进行错误处理
   bOk = func1();
   if(!bOk) 
   {
      free(p);   
      p = NULL;
      return false;
   }

   bOk = func2();
   if(!bOk) 
   {
      free(p);   
      p = NULL;
      return false;
   }

   bOk = func3();
   if(!bOk) 
   {
      free(p);    
      p = NULL;
      return false;
   }

   // ..........

   // 执行成功,释放资源并返回
    free(p);   
    p = NULL;
    return true;
}
View Code

相关文章: