盐亭做网站网站站点建设

news/2025/9/26 17:28:42/文章来源:
盐亭做网站,网站站点建设,分销系统搭建,ppt模板免费下载 素材红色C语言允许宏带有参数。在宏定义中的参数称为“形式参数”#xff0c;在宏调用中的参数称为“实际参数”#xff0c;这点和函数有些类似。 对带参数的宏#xff0c;在展开过程中不仅要进行字符串替换#xff0c;还要用实参去替换形参。 带参宏定义的一般形式为#xff1a…C语言允许宏带有参数。在宏定义中的参数称为“形式参数”在宏调用中的参数称为“实际参数”这点和函数有些类似。 对带参数的宏在展开过程中不仅要进行字符串替换还要用实参去替换形参。 带参宏定义的一般形式为 #define 宏名(形参列表) 字符串在字符串中可以含有各个形参。 带参宏调用的一般形式为 宏名(实参列表);例如 #define M(y) y*y3*y //宏定义 // TODO: kM(5); //宏调用在宏展开时用实参 5 去代替形参 y经预处理程序展开后的语句为k5535。 示例 输出两个数中较大的数。 #include stdio.h #define MAX(a,b) (ab) ? a : b int main(){int x , y, max;printf(input two numbers: );scanf(%d %d, x, y);max MAX(x, y);printf(max%d\n, max);return 0; }运行结果 input two numbers: 10 20 max20程序第 2 行定义了一个带参数的宏用宏名MAX表示条件表达式(ab) ? a : b形参 a、b 均出现在条件表达式中。程序第 7 行max MAX(x, y)为宏调用实参 x、y 将用来代替形参 a、b。宏展开后该语句为 max(xy) ? x : y;带参宏定义 1 . 带参宏定义中形参之间可以出现空格但是宏名和形参列表之间不能有空格出现。例如把 #define MAX(a,b) (ab)?a:b写为 #define MAX (a,b) (ab)?a:b将被认为是无参宏定义宏名 MAX 代表字符串(a,b) (ab)?a:b。宏展开时宏调用语句 max MAX(x,y);将变为 max (a,b)(ab)?a:b(x,y);这显然是错误的。 2 . 在带参宏定义中不会为形式参数分配内存因此不必指明数据类型。而在宏调用中实参包含了具体的数据要用它们去替换形参因此实参必须要指明数据类型。 这一点和函数是不同的在函数中形参和实参是两个不同的变量都有自己的作用域调用时要把实参的值传递给形参而在带参数的宏中只是符号的替换不存在值传递的问题。 示例 输入 n输出 (n1)^2 的值。 #include stdio.h #define SQ(y) (y)*(y) int main(){int a, sq;printf(input a number: );scanf(%d, a);sq SQ(a1);printf(sq%d\n, sq);return 0; }运行结果 input a number: 9 sq100第 2 行为宏定义形参为 y。第 7 行宏调用中实参为 a1是一个表达式在宏展开时用 a1 代换 y再用 (y)*(y) 代换 SQ得到如下语句 sq(a1)*(a1);这与函数的调用是不同的函数调用时要把实参表达式的值求出来再传递给形参而宏展开中对实参表达式不作计算直接按照原样替换。 3 . 在宏定义中字符串内的形参通常要用括号括起来以避免出错。例如上面的宏定义中 (y)*(y) 表达式的 y 都用括号括起来因此结果是正确的。如果去掉括号把程序改为以下形式 #include stdio.h #define SQ(y) y*y int main(){int a, sq;printf(input a number: );scanf(%d, a);sq SQ(a1);printf(sq%d\n, sq);return 0; }运行结果为 input a number: 9 sq19同样输入 9但结果却是不一样的。问题在哪里呢这是由于宏展开只是简单的符号替换的过程没有任何其它的处理。宏替换后将得到以下语句 sqa1*a1;由于 a 为 9故 sq 的值为 19。这显然与题意相违因此参数两边的括号是不能少的。即使在参数两边加括号还是不够的请看下面程序 #include stdio.h #define SQ(y) (y)*(y) int main(){int a,sq;printf(input a number: );scanf(%d, a);sq 200 / SQ(a1);printf(sq%d\n, sq);return 0; }与前面的代码相比只是把宏调用语句改为 sq 200/SQ(a1);运行程序后如果仍然输入 9那么我们希望的结果为 2。但实际情况并非如此 input a number: 9 sq200为什么会得这样的结果呢分析宏调用语句在宏展开之后变为 sq200/(a1)*(a1);a 为 9 时由于“/”和“”运算符优先级和结合性相同所以先计算 200/(91)结果为 20再计算 20(91)最后得到 200。 为了得到正确答案应该在宏定义中的整个字符串外加括号 #include stdio.h #define SQ(y) ((y)*(y)) int main(){int a,sq;printf(input a number: );scanf(%d, a);sq 200 / SQ(a1);printf(sq%d\n, sq);return 0; }由此可见对于带参宏定义不仅要在参数两侧加括号还应该在整个字符串外加括号。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音乐门户网站模板如何搭建网站

理解什么是关键字? Java赋予了某些单词特殊意义,就不能自己在代码中起同名一样的,否则提示错误 【在Java中关键字都是小写的,并不是所有的小写字母都是关键字,一般在IDEA中显示高亮橘黄色】 理解什么是保留字&#xf…

水翼式搅拌机推荐品牌/推荐厂家/优质供应商/哪家强?

水翼式搅拌机品牌推荐:南京兰江泵业——专业可靠的水处理设备专家 在污水处理和水体净化领域,水翼式搅拌机作为关键设备,其性能直接影响着整个系统的运行效率和效果。面对市场上众多品牌,如何选择一款质量可靠、性…

AutoMQ Ververica:打造云原生实时数据流最佳实践! - 教程

AutoMQ Ververica:打造云原生实时数据流最佳实践! - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

Java外功基础(1)——Spring Web MVC - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

100W QPS:亿级用户的社交关系如何设计?

当系统涌入亿级用户,100W QPS(每秒百万级请求) 是什么概念? 朋友圈里,大 V 发条动态,几百万粉丝同时收到推送; 直播间里,几十万人同时刷礼物、发弹幕; 电商大促,瞬间几千万下单请求直冲数据库。 没有合格的性…

php创建一个网站境外公司在国内建网站

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络(CNN)在时间序列中的应用 4.2 长短时记忆网络(LSTM)处理序列依赖关系 4.3 注意力机制(Attention) 4…

建立网站要什么条件和多少钱wordpress主题零基础

java集合提取最小的日期我们都广泛使用了Collection类,例如List,Map及其派生版本。 每次使用它们时,我们都必须遍历它们以找到某个元素或更新这些元素,或者找到匹配某个条件的不同元素。 考虑如下所示的人员列表: Lis…

网上有做衣服的网站有哪些一键网站制作

Description 背景: 和久必分,分久必和。。。 题目描述: 中国历史上上分分和和次数非常多。。通读中国历史的WJMZBMR表示毫无压力。 同时经常搞OI的他把这个变成了一个数学模型。 假设中国的国土总和是不变的。 每个国家都可以用他的国土面积代…

做网站在哪里申请wordpress default

掌握 GoLang Fiber 中的路由和中间件艺术,以进行高效的 Web 开发 在网络开发领域中,创建一个有效地路由和管理各种任务的 Web 应用程序至关重要。路由决定了如何处理传入的请求,而中间件在执行任务,如身份验证、日志记录和请求解…

坤驰科技携数据采集解决方案,亮相中国光纤传感大会

2025年9月20日至22日,第十三届中国光纤传感大会在武汉光谷希尔顿酒店召开。大会吸引了来自国内外高校、科研院所及相关行业企业的千余名专家学者齐聚江城,共同探讨光纤传感技术的最新发展与未来趋势。 本届大会不仅汇…

新手入门需要掌握多少种大模型才行

新手入门,不在于“掌握多种”大模型,而在于“掌握一类”大模型的用法,并理解其背后的原理。 你不需要像背单词一样去学习几十种模型,关键在于建立正确的认知和方法论。下图清晰地展示了你的学习路径与目标:接下来…

docker容器怎么查看最后一些行日志

docker容器如果日志太多使用命令查看日志会一直刷很久才到尾部 docker logs -f 容器ID可以使用以下命令直接查看最后一些行日志 docker logs -f --tail 2000 b459e5d7a4eb

MAC idea 环境变量设置失效

前言 使用MAC idea2025.2 tomcat8 设置环境变量,启动失效问题解决 分析 网上说是zsh和bash命令问题,但是尝试多次覆盖文件,启动读取依然没用 MAC下~/.bash_profile无效 ~/.bash_profile配置无问题,为何每次打开新…

Docker 配置问题

Docker 配置问题UniMRCP Docker 容器启动异常分析报告 1️⃣ 问题描述 在 Windows + WSL2 环境下启动 UniMRCP Docker 容器时,出现以下问题:容器内 /opt/unimrcp/conf 配置目录内容不是宿主机挂载目录,而是默认配置…

admin登录网站设计海报的软件

思维(1):商人:没人干过这种事,没有先例可循,万一砸了怎么办?温州人:没人干过怕什么?这样才没人跟你抢市场嘛,头道汤味道最好,先人一步的生意最赚钱…

建设企业银行网站杰恩设计网站是谁做的

Android中判断当前网络是否可用应用场景:实现判断当前网络是否可用当前有可用网络,如下图:当前没有可用网络,如下图:实现步骤:1、获取ConnectivityManager对象Context context activity.getApplicationCon…

【东北七大高校联合举办】第十一届机械制造技术与工程材料国际学术会议(ICMTEM 2025)

第十一届机械制造技术与工程材料国际学术会议(ICMTEM 2025) 2025 11th International Conference on Manufacturing Technology and Engineering Materials 在这里看会议官网详情 大会时间:2025年11月28-30日 大会地…

技术速递|如何使用 Playwright MCP 和 GitHub Copilot 调试 Web 应用 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

rocketmq-spring-boot-starter的使用

rocketmq-spring-boot-starter的使用一、引入场景启动器<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2…

C#/.NET/.NET Core技术前沿周刊 | 第 55 期(2025年9.15-9.21) - 实践

C#/.NET/.NET Core技术前沿周刊 | 第 55 期(2025年9.15-9.21) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…