宏定义详细知识点

2023-10-27

一、不带参数的宏定义

1、格式:

#define 宏名 字符串

例:#define a 6

则a是宏名,凡是出现a的地方均用6替换

2、注意:

宏替换是一种机械替换;不做语法检查,不是下一个语句,其后不加";"

#define命令出现在函数的外面,有效范围是定义处到本源文件结束,可以用#undef命令终止作用域。

进行宏定义时可以用已经定义的宏名,进行层层叠换。

对程序中双引号括起来的字符串内,即使与宏名相同,也不进行置换。

#define a 3
int fun()
{
......
}
#undef a
int main()
{
......
}

二、带参数的宏定义

1、格式:

#define s(a,b) a*b

2、该宏替换也是机械替换

#define s(a,b) a*b

int a=1;int b=2;

data=s(a+b,a+b);

data的值并不等于9而是1+2*1+2=5

3、实际例子:

1、定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。
输出已交换后的两个值。

#include <iostream>
using namespace std;
#define change(a,b) int t=a; a=b; b=t
int main()
{
	int n, m;
	cin >> n >> m;
	change(n, m);
	cout << n << '\t' << m;
}

运行结果: 

2、输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。

#include <iostream>
using namespace std;
#define remainder(a,b) a%b
int main()
{
	int n, m;
	cin >> n >> m;
	int t=remainder(n, m);
	cout << t << '\n';
	return 0;
}

运行结果:

3、三角形面积 = SQRT(S * (S - a) * (S - b) * (S - c)) 其中S = (a + b + c) / 2,a、b、c为三角形的三边。定义两个带参的宏,一个用来求area,另一个宏用来求S,写程序,在程序中用带实参的宏名来求面积area(保留三位小数)​​​​​​​

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
#define fun1(a,b,c) (a+b+c)/2
#define fun2(s) sqrt(s * (s - a) * (s - b) * (s - c))
int main()
{
	float a, b, c;
	cin >> a >> b>>c;
	float s = fun1(a, b, c);
	float area = fun2(s);
	cout << fixed << setprecision(3) << area << '\n';
	return 0;
}

运行结果:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

宏定义详细知识点 的相关文章

随机推荐

  • python3.0实例_python3.0 模拟用户登录,三次错误锁定的实例

    python用户登录三次锁定怎么修改 1 normal user是存放用户id及密码的文件 2 lock file是存放被锁定的用户id的文档 默认为空 3 程序会对normal user里的合法用户id进行判断 若连续输入用户id错误达三
  • win10开机后电脑磁盘占用百分之百解决方法

    1 我的电脑 管理 服务与应用程序 服务 superfetch 禁用 重启 2 控制面板 管理工具 服务 找到 HomeGroupListener 家庭组 服务 禁用 3 关闭自动维护计划任务 选中磁盘C 属性 工具 对驱动器进行优化和碎片
  • 小程序监听页面的返回按钮方法

    不论是微信小程序还是支付宝小程序中都没有这个生命周期函数 但是老板要求实现这个方法 只好百度 想办法解决问题 具体用户的操作流程是 从第一个页面出发 走到第二个页面 然后又返回第一个页面 以下是我具体实现的代码 在第二个页面的 onShow
  • Jmeter(十三) - 从入门到精通 - JMeter定时器 - 上篇(详解教程)

    1 简介 用户实际操作时 并非是连续点击 而是存在很多停顿的情况 例如 用户需要时间阅读文字内容 填表 或者查找正确的链接等 为了模拟用户实际情况 在性能测试中我们需要考虑思考时间 若不认真考虑思考时间很可能会导致测试结果的失真 例如 估计
  • 人工智能芯片

    发展趋势 人工智能技术研究的催化剂 新型高性能计算架构 参考寒武纪芯片 华为NPU 高通5G芯片 计算芯片发展趋势 计算芯片架构逐渐向深度学习应用优化的趋势发展 从传统的CPU为主GPU为辅的因特尔处理器转变为GPU为主CPU为辅的结构 性
  • JS逆向之HOOK注入、调试、插桩

    一 使用油猴脚本进行注入 获取Cookie的加密参数 新建油猴脚本文件 UserScript name cookie的HOOK namespace http tampermonkey net version 0 1 description
  • 写论文和做项目中遇到的问题及其解决办法

    相比Microsoft Office Word 我更推荐用WPS Office Word编写论文 感觉后者用起来更轻松 1 利用Word自带的的标题样式快速给文档设置一到三级标题 2 Word文档中具有编辑器自带标题样式的文字前面都有小黑方
  • 【YOLOv5-6.x】设置可学习权重结合BiFPN(Add操作)

    文章目录 前言 修改yaml文件 以yolov5s为例 只修改一处 将Concat全部换成BiFPN Add 打印模型参数 修改common py 修改yolo py 修改train py 1 向优化器中添加BiFPN的权重参数 2 查看B
  • 疼失鸡鸡,吊唁鸡鸡

    为了忘却的纪念 今天是我痛失鸡鸡的日子 一个好鸡鸡是很难找的 一个集群的鸡鸡跟难找的 为了吊唁我的鸡鸡 我觉得为它写一篇文章
  • Matplot pyplot绘制单图,多子图不同样式详解,这一篇就够了

    Matplot pyplot绘制单图 多子图不同样式详解 这一篇就够了 1 单图单线 2 单图多线不同样式 红色圆圈 蓝色实线 绿色三角等 2 1 4 支持的所有颜色及样式 3 使用关键字字符串绘图 data 可指定依赖值为 numpy r
  • 【BLE】蓝牙抓包器 Ellisys 使用说明

    BLE 蓝牙抓包器 Ellisys 使用说明 常用功能 设备过滤 抓包的类型 添加观察的项目 协议解析 连接过程 Connection Indication LLCP Feature Request Response LLCP Length
  • Java多线程通信-CountDownLatch(闭锁)

    一 CountDownLatch 闭锁 闭锁是一个同步工具类 它可以延迟线程的进度直到其到达终止状态 闭锁的作用相当于一扇门 在到达结束状态之前 这扇门是关闭的 并且不允许任何进程通过 当到达结束状态时 这扇门会打开并允许所有的线程通过 当
  • wangeditor3.0上传本地图片和本地视频至服务器

    1 效果 2 注意 我下载的3 0版本 3 组件 在components文件里创建一个wangEditoe vue文件
  • Java基于opencv实现图像数字识别(一)

    Java基于opencv实现图像数字识别 一 最近分到了一个任务 要做数字识别 我分配到的任务是把数字一个个的分开 当时一脸懵逼 直接百度java如何分割图片中的数字 然后就百度到了用BufferedImage这个类进行操作 尝试着做了一下
  • Vue生命周期和钩子函数详解

    Vue生命周期和钩子函数详解 Vue生命周期介绍 组件每个阶段它的内部构造是不一样的 所以一般特定的钩子做特定的事 比如Ajax获取数据就可以在mounted阶段 从Vue实例被创建开始到该实例最终被销毁的整个过程叫做VUE的生命周期 在这
  • A*算法学习笔记

    1 算法思路 1 Dijkstra算法与A 算法 1 Dijkstra算法 贪心策略 优先队列 集合S 已确定的顶点集合 初始只含源点s 集合T 尚未确定的顶点集合 算法反复从集合T中选择当前到源点s最近的顶点u 将u加入集合S 然后对所有
  • 使用myisamchk命令修复表 只能修复myisam表 速度块

    快速检查 myisamchk im var lib mysql db1 只检查没有正常关闭的表 myisamchk iFm var lib mysql db1 仅显示标的重要信息 myisamchk eis var lib mysql db
  • 【Markdown】Typora配置图片上传

    文章目录 0 前言 1 确定需求 2 开始配置 2 1 软件储备 2 2 插件安装 2 3 gitee配置 3 其他配置 3 1 获取SMMS token 参考链接 0 前言 对于喜欢写Markdown文档的人来说 Typora无疑是一个写
  • 30分钟学会如何使用Shiro

    http www cnblogs com learnhow p 5694876 html 一 架构 要学习如何使用Shiro必须先从它的架构谈起 作为一款安全框架Shiro的设计相当精妙 Shiro的应用不依赖任何容器 它也可以在JavaS
  • 宏定义详细知识点

    一 不带参数的宏定义 1 格式 define 宏名 字符串 例 define a 6 则a是宏名 凡是出现a的地方均用6替换 2 注意 宏替换是一种机械替换 不做语法检查 不是下一个语句 其后不加 define命令出现在函数的外面 有效范围