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