do{}while(0)
2024-10-01 03:10:04
有时会在源码中或在写代码时在宏定义中用到do...while(0)
.
采用这种方式进行宏定义, 主要是为了防止出现以下错误 :
do{}while(0)
空的宏定义避免出现warnning.
#define foo() do{}while(0)
存在一个独立的操作, 可以进行变量定义, 进行比较复杂的实现.
若果出现在判断语句过后的宏, 这样可以作为一个整体来实现.
#define foo(x) \
action1(); \
action2();
在以下情况中就会出错 :
if (NULL == pointer)
foo(); //在这种情况下就会出现 action1, action2不会被同时执行的情况。
使用do{}while(0)原因
以上三种情况均可以用{}
, 实现,但为什么一定要用do{}while(0).
比如 :
#define switch(x,y) {int tmp; tmp =x; x = y; y = tmp;}
if (x > y)
switch(x,y);
else //出现编译错误,宏引入代码后多一个分号
otherAction();
将宏用do{}while(0)
将宏包裹起来使其成为一个独立的语法单元, 从而不会与上下文发生混淆, 同时大部分编译器能够识别 do{}while(0)
这种无用的循环, 并对其进行优化, 所以使用这种方法不会导致性能的降低.
最新文章
- linux udev 自动挂载 SD卡/U盘
- Adb工具配置和设备连接
- 洛谷P3392 涂国旗
- OC中的面向对象语法3
- Pycharm使用问题# 行号设置
- Android adb shell命令大全
- appserv在哪修改服务器名
- C++时间获取
- java 文件操作 读取字节级数据(读取)
- 应用控制台应用程序开发批量导入EXEL程序。
- numpy教程:快速傅里叶变换模块numpy.fft
- Windows Server 2008系统
- python查询mysql并生成excel表
- Apollo配置中心
- mysql的部署
- Log4j Append属性指定是否追加内容
- es-07-head插件-ik分词器插件
- java去除数组中重复的元素方法总结
- 【BZOJ1054】移动玩具(搜索)
- Mac OSX系统下通过ProxyChains-NG实现终端下的代理
热门文章
- LeetCode 249. Group Shifted Strings (群组移位字符串)$
- JavaScript Patterns 2.6 switch Pattern
- ubuntu下使用crontab定时器
- js如何获取某id的子标签
- bzoj 3993 星际战争
- Complicated Expressions(表达式转换)
- phpci发送邮件
- [App Store Connect帮助]三、管理 App 和版本(2.3)输入 App 信息:提供自定许可协议
- php微信开放平台--第三方网页微信扫码登录(OAuth2.0)
- Scaffold-DbContext-EFCore DB First