【宏定义】——为什么使用 do{} while(0) 结构

chatgpt/2023/9/24 2:12:04

不使用 do while(0)

#define MY_MACRO(x) \printf("Hello "); \printf("%d", x);

如果有 if 判断代码

if  (x)MY_MACRO(x)

那么宏展开后就是

if (x)printf("Hello ");printf("%d", x);

第二个语句并没有在 if 成立时执行

上述问题可以用 {} 解决

#define MY_MACRO(x) { \printf("Hello "); \printf("%d", x);  \}

if (a)MY_MACRO(a);
elseMY_MACRO(b);

那宏展开后就是

if (a){printf("Hello ");printf("%d", x);};
elseMY_MACRO(b);

在if-else 语句中 }; 这种结构是会报错的

使用 do while(0) 结构

#define MY_MACRO(x) do { \printf("Hello "); \printf("%d", x); \
} while(0)

完美解决上述问题

if (a)do{printf("Hello ");printf("%d", x);} while (0);
elsedo{printf("Hello ");printf("%d", x);} while (0);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5314334.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分享】1999—2021年地级市地区生产总值及一二三产构成数据(Shp/Excel格式)

在之前的文章中,我们分享过基于2000-2022年《中国城市统计年鉴》整理的1999-2021年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、地方一般公共预算收支状…

TWILIGHT靶场详解

TWILIGHT靶场详解 下载地址:https://download.vulnhub.com/sunset/twilight.7z 这是一个比较简单的靶场,拿到IP后我们扫描发现开启了超级多的端口 其实这些端口一点用都没有,在我的方法中 但是也有不同的方法可以拿权限,就需要…

《深入浅出Java虚拟机》AIC松鼠活动第五期

1、JAVA虚拟机 1.1什么是java虚拟机 Java虚拟机(Java Virtual Machine,JVM)是一种用于执行Java字节码的虚拟机。它可以将Java源代码编译为字节码,然后在不同的操作系统和硬件平台上运行。作为Java语言的核心组成部分&#xff0…

GBDT+LR级联实现

1. 背景 一般选择gbdt回归树 2. 实现 gbdt GradientBoostingRegressor() gbdt.fit(X_train, y_train) model_fea gbdt.apply(X_train) model_fea_enc enc.transform(model_fea).toarray() X_train_new np.concatenate([X_train, model_fea_enc], axis1) 类别型特征处理…

vue3搭建Arco design UI框架

技术:Vue3.2.40 UI框架:Arco design 2.44.7 需要安装:yarn 1.22.19 和npm 8.19.4 1.第一步安装本地全局arco脚手架 管理员运行CMD npm i -g arco-cli安装成功后如下: 2.第二步在需要存放项目的文件夹拉取项目 我这里把项目存放在 D:\W…

linux系统安装psycopg2

参考链接 python“趟坑”(一) —— linux系统安装psycopg2

亚马逊调整数据存档政策:超两年的订单将从9月起存档!

2023年9月起,亚马逊美国站和欧洲站宣布对订单数据存档政策进行调整。该调整意味着自2023年9月起,所有历时两年以上的订单将按月存档。此举是为了确保客户的个人隐私和数据安全,存档订单将不再包含买家的个人身份信息,如姓名、电话…

刷题 31-35

三十一、 747. 至少是其他数字两倍的最大数 给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。 请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。 示例 1&a…
推荐文章