C语言 ——— 带副作用的宏参数

目录

带有副作用的代码

带有副作用的宏参数

 结论


带有副作用的代码

代码演示:

int a = 10;int b = ++a;

副作用解析:

变量 a 在赋值给 b 之前 a 的值自增了1,那么 int b = ++a; 这条代码就带有副作用


带有副作用的宏参数

代码演示:

#define MAX(x,y) ((x)>(y)?(x):(y))int main()
{int a = 5;int b = 6;int max = MAX(a++, b++);return 0;
}

代码解析:

解析 int max = MAX(a++, b++):根据 #define 的替换规则可得知,a++ 和 b++ 这两个参数是直接替换的,不会进行任何计算和转换,所以 MAX(a++, b++) 在程序预编译阶段就会转换为以下代码

int max = ((a++) > (b++) ? (a++) : (b++));

先执行 (a++) > (b++)  ,且是后置加加,所以是先使用,再加加,a 的值是 5,b 的值是 6,是 b 大于 a

所以 (a++) : (b++) 中的 (a++) 就不会执行,执行完了 (a++) > (b++) 后,a 的值自增成了 6 ,b 的值自增成了 7

最后的结果是 max = (b++) ,也是先使用,后加加,b 的值为 7,所以 max 就为 7

最后 b 再自增 1,b就自增成了 8

代码验证:


 结论

任何变量在宏中都是替换进去的,如果变量像是 a++ 或者 b++ 这种带有副作用,且在宏中不止执行一次的话,那么副作用的效果就会持续传递下去,所以尽量不要传递含有副作用的参数给宏

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【激活函数总结】Pytorch中的激活函数详解: ReLU、Leaky ReLU、Sigmoid、Tanh 以及 Softmax

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

UniApp实现漂亮的音乐歌词滚动播放效果

在现代的音乐播放应用中,歌词的展示和滚动播放已经成为了一个非常常见的功能。今天,我们将通过UniApp来实现一个漂亮的歌词滚动播放功能。我们将使用UniApp提供的组件和API来完成这个任务。 页面结构 在页面的模板部分,我们需要创建一个音频…

基于MinerU的PDF解析API

基于MinerU的PDF解析API - MinerU的GPU镜像构建 - 基于FastAPI的PDF解析接口支持一键启动,已经打包到镜像中,自带模型权重,支持GPU推理加速,GPU速度相比CPU每页解析要快几十倍不等 主要功能 删除页眉、页脚、脚注、页码等元素&…

使用Python中的igraph为绘图添加标题和图例

在 igraph 中,可以通过添加标题和图例来增强图形的可读性和表达能力。我们可以使用 igraph.plot 函数进行绘图,并通过它的参数来指定标题和图例。 1、问题背景 在python中的igraph库中,能否为绘图添加图例和标题?在手册或教程中都…

Qt项目使用Inno Setup打包(关于打包中文乱码的解决)

​ 关于打包好的文件乱码解决方法 打包好的文件中文乱码,就是编码格式出现了问题,更改一下中文脚本编码格式,在官网Inno Setup Translations下载好中文脚本 点击下载,然后另存为 得到ChineseSimplified.isl.txt文件后&#…

《MaPLe: Multi-modal Prompt Learning》中文校对版

系列论文研读目录 文章目录 系列论文研读目录题目:《Maple:多模态提示学习》摘要1.简介2.相关工作视觉语言模型:提示学习:视觉语言模型中的提示学习: 3.方法3.1.回看CLIP编码图像:编码文本:Zero…

【H2O2|全栈】关于HTML(5)HTML基础(四)

HTML基础知识 目录 HTML基础知识 前言 准备工作 标签的具体分类(四) 本文中的标签在什么位置中使用? 表单(一) 表单标签 输入域标签 预告和回顾 后话 前言 本系列博客将分享HTML相关知识点。 这一期博客&…

mac|安装nginx

使用homebrew安装nginx brew install nginx 注意: 一般来说nginx会被默认安装在/usr/local/cellar,打开【访达】,前往【电脑】 由于/usr是隐藏文件,无法直接查看。通过 shiftommand. 即可查看 可以看到我的不在这里(我也不知道…

python基础语法七-openpyxl操作excel

书接上回: python基础语法一-基本数据类型 python基础语法二-多维数据类型 python基础语法三-类 python基础语法四-数据可视化 python基础语法五-函数 python基础语法六-正则匹配 1. 打开文件 (1)创建新文件 from openpyxl import W…

仕考网:考公务员有什么好处?

公务员工作节奏不快,工作压力小,不用担心下岗待业工作很稳定。机关事业单位职工退休可拿到在职工资的80%至 90%。薪资待遇高,国家也在不断完善中央和地方公务员薪酬体系管理工作,提高公务员薪资。 1、公务员定义 (1)公务员考试,…

搭建Docker私有仓库管理本地的Docker镜像,通过harbor实现Web UI访问和管理私有仓库

要在本地搭建一个Docker私有仓库,你可以按照以下步骤进行设置: 安装Docker 确保你已经安装了Docker。如果还没有安装,可以按照官方指南进行安装: 对于Ubuntu系统,你可以运行以下命令来安装Docker: sudo ap…

【前端】animation动画以及利用vue制作简单的透明度改变动画,包含vue生命周期实现

一. 问题描述 想做一个文字透明度从1到0然后再从0到1的css动画。 二. 代码写法 2.1 animation写法 2.1.1 animation属性key 2.1.2 代码展示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"…

利士策分享,逆境破局关键:精准策略

利士策分享&#xff0c;逆境破局关键&#xff1a;精准策略 在人生的征途上&#xff0c;逆境如同试炼场&#xff0c;考验着我们的智慧与勇气。 为了在这片试炼场上稳健前行&#xff0c;我们需要一套具体而精准的应对策略。 以下&#xff0c;是结合实践经验与智慧总结的应对策略…

【环境领域EI稳定 I 院士主讲】第九届能源与环境研究进展国际学术会议(ICAEER 2024)

ICAEER 2024会议投稿经过2-3位组委会专家严格审核之后&#xff0c;符合Springer ESE征稿要求的论文将由斯普林格&#xff08;Springer-Nature&#xff09;旗下的 Environmental Science and Engineering (ISSN: 1863-5520) 出版&#xff0c;出版后提交至EI Compendex&#xff…

最新SMS测压SMS源码 全新版本

php调至7.3 设置伪静态为thinkphp 设置网站运行目录为public 编辑根目录下的.env文件配置数据库信息 详细教程请看源码内置说明文本&#xff01; 亲测截图&#xff01;真实有效&#xff01; 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/8972239…

如何通过食堂采购小程序端降低成本,提升效率?

随着数字化管理工具的普及&#xff0c;越来越多的食堂正在引入小程序来优化采购流程&#xff0c;减少成本和提升效率。食堂采购小程序端通过技术手段实现了自动化、智能化的管理方式&#xff0c;为管理者提供了极大的便利。本文将探讨如何利用技术手段开发一个高效的食堂采购小…

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数 一、环境说明二、页面之间相互传参 一、环境说明 DevEco Studio 版本&#xff1a; API版本&#xff1a;以12为主 二、页面之间相互传参 说明&#xff1a; 页面间的导航可以通过页面路由router模块来实现。页面路由模块根据页…

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文&#xff5c;华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求&#xff0c;一定…

打造可视化数据大屏供应链管理平台:基于食堂采购系统源码的开发方案

食堂采购系统作为供应链管理的一个关键组成部分&#xff0c;通过集成可视化数据大屏&#xff0c;可以有效提升采购和供应链各环节的管理效率。在本文中&#xff0c;我们将探讨如何基于食堂采购系统源码&#xff0c;开发一个高效的可视化数据大屏供应链管理平台。 一、可视化数据…

Java数组(详解版)

数组的定义&#xff1a; 什么是数组&#xff1a; 数组&#xff1a;可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。 1. 数组中存放的元素其类型相同 2. 数组的空间是连在一起的 3. 每个空间有自己的编号&#xff0c;其实位置的编号为 0 &#xff0c;即数组…