从C出发 25 --- 宏定义

文章讨论了C语言中函数调用时形参与实参的区别,强调在swap函数中变量的交换仅发生在函数内部。宏虽然在使用上类似函数,但实际上是文本替换。文中还提到了const定义的常量并非真正的常量,并指出C语言允许一条语句跨越多行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

为什么 x = 1, y = 2 ?

原因在于实参与形参没有任何关系,在这个地方确实是以 x 与 y 作为实参来调用swap了,而真实发生的事情是 ,x作为初始值用于初始化a ,也就是说,这次调用a被初始化为1了,然后y作为初始值用于初始化b,也就是说这次调用b的值为2了,之后x 与 y 的调用就与这次调用没有任何关系了,在这个函数的内部,a和b 发生了交换,交换完之后这个函数就返回了,既然函数返回,也就意味着a和b 就被销毁了,所以接着向下执行,从swap返回,所以接着向下执行x 与 y 还是 1 与 2

swap 里面的 a 和 b 针对的是swap 的a和b,与外界的a和b没有关系

函数中改变的是形参的值 

 

宏是函数的替身,绝大数的情况下应该是考虑函数而不是宏

宏也又三部分组成

代码片段所对应的名字以及参数      需要封装的代码片段

 

#include <stdio.h>

#define ADD(a, b) a + b    //只有看到ADD 才知道是宏的使用,而不是函数

int main()
{
int x = 1;
int y = 2;

printf("x + y = %d\n", ADD(x,y));  //如何不看上面函数, 你能区分是函数调用还是宏的使用吗?

return 0;

}

宏仅仅是使用的时候像函数

 

 在 c 语言里面并没有要求一条语句只能写在一行,C 语言里面是以一个分号 ; 作为一个语句的结束的

这里能够交换成功吗?

可以,因为 define 的执行方式是 复制粘贴替换 


我们可以 define 一个真正意义上的常量, const所定义的只是一个只读变量,不是真正意义上的常量,如果想要一个真正意义上的常量

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长生君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值