C语言,#define定义宏和函数的对比

文章对比了#define宏定义与函数在代码长度、执行速度、操作符优先级、参数类型、调试能力和递归方面的差异。宏定义可能导致代码膨胀,执行速度快但不支持递归和调试;而函数代码只有一份,支持调试,但在类型安全和性能上稍逊。
摘要由CSDN通过智能技术生成

一、代码长度

#define定义宏:每次用到 #define 时,对应的代码会插入的程序中,如果#define定义宏的代码比较长,就会导致插入后的程序长度大幅度增长;

函数:函数的代码只出现一次,每次使用这个函数就调动就行。

二、执行的速度

#define定义宏:速度更快,因为在预编译阶段就已经完成了替换;

函数:存在函数的额外调用和返回值的额外开销,速度相对于慢一些。

三、操作符优先级

#define定义宏:需要提前加好括号,否则可能有未知的错误,例如

                #define   DOUBLE(x)   x+x

                int a=5;

                printf("%d",10*DOUBLE(a));

                答案是:10*5+5=55.

函数:就不会出现类似#define定义宏的未知错误。

四、参数类型:

#define定义宏:可以参与任何类型的计算,例如:

                #define   MAX(X,Y)   ((X)>(Y)?(X):(Y))

                它可以参与任何类型的计算,如float、int、short等等

函数:它就不能参与任何类型的计算,是什么类型就只是参与什么类型,除非强制类型转换,因此凭借这点来说,#define在这仿麦呢方便很多

 五、调试

#define定义宏:不能调试,因为宏的替换发生在预编译阶段;

函数:可以调试,且能够逐语句调试,当代码出现bug时,能够分析出原因在哪里。

六、递归

#define定义宏:不能递归;

函数:可以递归。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值