【C语言】用(#define)宏定义表达式写出加法、交换函数

您所在的位置:网站首页 函数名宏定义怎么写出来 【C语言】用(#define)宏定义表达式写出加法、交换函数

【C语言】用(#define)宏定义表达式写出加法、交换函数

2024-06-03 12:33:16| 来源: 网络整理| 查看: 265

#define宏 1. 用宏定义表达式完成加法运算函数 #define ADD(x,y) ((x)+(y))

宏会替换到调用宏函数的地方,这是毋庸置疑的。

为什么x+y的整体要加上() ?那么为什么参数x,y要加上() ? 我们来结合代码看一下吧。 #define ADD(x,y) x+y int main() { int x1 = 3; int x2 = 5; printf("%d\n", ADD(x1,x2)*ADD(x1,x2) ); //被替换为 3+5*3+5 = 23 }

结果: 在这里插入图片描述 分析: 我们预期的结果应该是 8 * 8 = 64, 为什么是23呢? 因为它被替换为 3+5 * 3+5 = 23 。所以我们要加上(), (3+5)*(3+5)才等于64,我们期待的答案。所以x+y的整体要加上()。

那么为什么参数的x,y都要加上() ? 因为运算符的优先级不一样,参数x,y可能是表达式 #define ADD(x,y) (x + y) int main () { int x1 = 1; int x2 = 2; printf("%d\n" , ADD(x1|x2,x1|x2)); //被替换为 1|2 + 1|2 = 3 ; '+'的优先级比 '|'高 }

结果: 在这里插入图片描述 分析: 我们预期的结果是3+3 = 6。 但是结果为3。 因为’+'的优先级比 '|'高 。 没有先运算x1|x2 , 所以加上(), (x1|x2)+(x1|x2)。

2. 用宏定义表达式完成两个数的交换 #define SWAP(Type,name,x,y)\ //Type 交换的变量x,y的类型 Type c##name = x;\ x = y;\ y = c##name int main() { int a = 0; int b = 3; printf("a = %d, b = %d\n", a, b); SWAP(int, 1, a, b); printf("a = %d, b = %d\n", a, b); system("pause"); }

结果: 在这里插入图片描述 分析:

我们先来讲一下’’ 和 ‘##’ 符号的作用 ’’ : 续航符,宏定义一行没有结束的时候,换行写的时候,在前面一行的末尾加上换行符。 注:续航符的后面不能加空格或者Tab。 ’##’: 把两边的符号合成一个符号。 比如在这里就是将变量c和name合成一个变量 #define SWAP(Type,name,x,y) Type c##name = x; x = y; y = c##name SWAP(int, 1, a, b) 就是 int c1 = a; a = b; b = c1;

那么为什么要加上name这个参数? 因为多次调用这个宏的时候,会多次宏替换,会多次定义出变量c,重定义变量,会报错。所以第一调用的时候SWAP(类型,1,x,y), 第二次调用的时候SWAP(类型,2,x, y), 。。。 就会定义出不同的变量 c1, c2, c3 …cn 。

3. 下面运算后x,y,z的值是多少? #define MAX(a,b) ((a) >(b) ? (a):(b)) int main() { int x = 5; int y = 8; z = MAX(x++,y++); printf("x = %d , y = %d , z =%d\n", x,y,z); // 6, 10 , 9 }

分析: 将MAX的函数替换到main函数中的位置。 z = ((x++) >(y++) ? (x++):(y++)); 先x++,此时x=6, 但是返回的是5; y++, 此时y=9, 但是返回的是8; z = 5 > 8 ? (x++) ? (y++); // z = 5 > 8 ? (6++) ? (9++); 5 > 8 不成立, 所以y++, 此时 y= 10; 返回的是9。 所以z = 9,y = 10, x = 6



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭