带参数的宏定义与有参函数的区别

1、先介绍一下什么是宏定义

       宏定义属于C语言编译系统中编译预处理中的一部分(但编译预处理不是C语言的语句),其作用是为编译系统提供必要的前置信息,告诉编译系统在源程序进行编译之前应该做些什么。它有利于程序的模块化设计,提高代码效率,增加了程序的可读性,方便程序的调试和移植。

例如: 宏定义如下:#define   宏名   宏体

#define PI 3.1415926  /*用PI代表3.1415926*/
#define PR printf     /*用PR表示printf*/

一定是要定义完后才可使用,使用宏名可以有效减少程序中重复书写的某些宏体的工作量,其有效范围是从定义的位置到文件的结束。

 

2、带参数的宏定义

带参数的宏定义,即宏名后面可以带有形式参数,在宏体中包含宏名后面的参数。

一般形式为:#define    宏名(参数表)   宏体

#define L(X)(X)*(X)*(X)

 

3、区别

带参数的宏定义与有参函数很相似,使用的时候要注意两者的区别:

(1)函数调用要求实参和形参类型一致,如实参是表达式:必须先计算出值。,然后再传递给形参,宏体也无类型,宏展开只进行参数的简单替换。

(2)函数调用是在程序运行时处理,为形参分配临时的内存单元,可以有返回值:而宏展开是在编译前进行的,展开时并不为形参分配内存单元,不进行值的传递,没有返回值的概念

(3)调用函数最多得到一个返回值,而用宏定义可以设法得到多个值。

(4)宏展开会使源程序变长,而函数调用不会使源程序变长。

(5)宏替换不占运行时间:只占编译时间,而函数调用则占运行时间(分配存储空间,保国现场值传递、返回等)。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

S.C.Dragon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值