do{} while(0)的使用
来源:互联网 发布:洪泽新闻网农村淘宝 编辑:程序博客网 时间:2024/04/18 17:57
如果你做过linux,你就会发现在很多地方的宏定义会用到:#define XXX_XXXX do{xxxx;xxx;}while(0)
为什么这种执行一次的语句要有这种方式来实现。当然有原因!
为了看起来更清晰,这里用一个简单点的宏来演示:
#define SAFE_DELETE(p) do{ delete p; p = NULL} while(0)
假设这里去掉do...while(0),成#define SAFE_DELETE(p) delete p; p = NULL;
那么以下代码:
if(NULL != p)
SAFE_DELETE(p)
else
...do sth...
就有两个问题:
1) 因为if分支后有两个语句,else分支没有对应的if,编译失败
2) 假设没有else, SAFE_DELETE中的第二个语句无论if测试是否通过,会永远执行。
那我直接用{}括起来就可以了,成#define SAFE_DELETE(p) { delete p; p = NULL;},那么如下语句会有问题:
if(NULL != p)
SAFE_DELETE(p); //替代完毕后扩后后面还会有个分号,也是问题
else
...do sth...
如果用do while(0),则成:
if(NULL != p)
do
{ delete p;p=NULL;}while(0);
else
...do sth...
- do{} while(0)的使用
- do while{0}的使用
- do{}while(0)的使用
- do while的使用
- do...while的使用
- do..while(0)使用
- 使用do{ } while(0);
- do{}while(0)的使用技巧
- 使用do{ } while(0)的好处
- do{}while(0)的使用(COPY)
- do..while(0)的使用小技巧
- 使用do{}while(0)的好处
- 使用do{ } while(0)的好处
- 使用do{ } while(0)的好处
- 使用do{ } while(0)的好处
- while、do...while、for循环的使用
- do while结构的使用
- Java do-while的使用
- u-boot中代码的疑问(_armboot_start与_start?) (转)
- Linux下查看CPU使用率!系统资源使用情况
- 关于ARM的一些概念
- 每天都要积累
- 2009年上半年系统分析师上午试题答案(分析与解答))(第1次修订 修订时间:2002年02月02日21时54分)(5月份)
- do{} while(0)的使用
- vmware中linux上网设置——NAT
- [转载]Paxos算法在大型系统中常见的应用场景
- (转载) 到底什么样的杀毒软件好
- reactos操作系统实现(148)
- Class文件格式解析
- Linux nfs 服务端配置
- (转贴) 安全知识:杀毒软件引擎技术之窥探
- ABEND SB37 and ABEND S04E and ABEND S106