关于宏中使用do{}while(0)的作用
来源:互联网 发布:大庆58同城网络交易 编辑:程序博客网 时间:2024/06/05 00:19
关于do{}while(0),大家肯定不会陌生,就是do 里面的循环体执行一次,且仅执行一次。那这样和普通的语句有什么区别呢?在宏中,这样做是为了保证宏的正确执行(行为一致),就跟if(n ==0 ) ,大家会写成if(0 == n) 一样。一下是一个例子,便于理解。
#include "stdio.h"#define DIVISION(X,Y) add((X) , (Y));\ div((X), (Y))int add(int x, int y){ printf("add");}int div(int x, int y){ printf("div");}int main(int argc, _TCHAR* argv[]){ bool flag = true; if (!flag) DIVISION(6, 2); getchar(); return 0;}
看着个例子,!flag为NULL,DIVISION的宏中的add(),div()是不应该被执行的。但实际的结果确是
那么为什么会出现这种现象呢?当我们按照宏进行替换时,代码就会变成这样 if(!flag) add(6,2);div(6,2);
编译器便会认为成这样:
if(!flag) add(6,2);div(6,2);
所以便会出现非预期现象。所以为了保证宏在任何情况下的一致性,则需加上do{}while(0)语句。
#define DIVISION(X,Y) \ do{\ add((X),(Y));\ div((X),(Y));\ }\ while(0)
这样就不会出现这种问题了。这种用法大量见于宏定义中含有的多行语句的时候。
阅读全文
0 0
- 关于宏中使用do{}while(0)的作用
- c++中do...while(0)的作用
- 宏定义中do{}while(0) 的作用
- 宏定义中Do{...}while(0)的作用
- 内核代码宏中 do{...}while(0) 的作用
- do{ }while(0) 的宏的作用!
- do while(0)的作用
- do{}while(0) 的作用
- do while(0)的作用
- do...while(0)的作用
- do...while(0)的作用
- do while(0)的作用
- do{}while(0)的作用
- 宏定义中使用do{}while(0)的好处
- 宏定义中使用do{}while(0)的好处
- 宏定义中使用do{}while(0)的好处
- 宏定义中使用do{}while(0)的好处
- 宏定义中使用do{}while(0)的好处
- Python利用groupby模块进行Mysql分表数据的汇总统计
- Binder机制简介
- PAT:B1033. 旧键盘打字(16/20)
- Value okhttp3.internal.http.RealResponseBody@49ebb98 of type java.lang.String cannot be converted to
- deeplearning练手之 transfer learning极速实现 之 猫狗分类器 (keras实现)
- 关于宏中使用do{}while(0)的作用
- static const volatile
- 使用京东云免费云主机搭建CentOS
- springcloud(九):配置中心和消息总线(配置中心终结版) 2017/05/26
- Gym 101623I
- 带裁剪的图片上传功能jquery插件
- Shiro整合Web项目及整合后的开发
- 闲谈一
- Collection 集合,迭代器,泛型