0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

预处理宏的优缺点有哪些

麦辣鸡腿堡 来源:轩哥谈芯 作者:轩哥谈芯 2023-11-01 17:44 次阅读

预处理宏的优缺点

在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?

我们还是看上一篇文章中引用的比较大小的例子:

#define MAX( a, b) ( (a) > (b) ? (a) : (b) )
//把它用函数来实现:
int max( int a, int b)
{  
    return (a > b ? a : b);
}

如果我们在程序中将要使用比较大小的函数,我们显然会选用上面的宏定义,理由如下:

首先,函数调用会带来额外的开销,他需要开辟新的栈空间,记录返回值,还需要将形参压入栈中,函数返回时还需要释放堆栈空间。

这样的开销不仅会让程序执行效率变低,代码量也会大大增加,因此使用上面的宏函数做文本替代就显得更明智。

其次,函数的形参被声明成了一个特定的类型,如例子中是 int,这样如果我们软件中需要使用浮点型的比较大小,我们就不得不重写一个函数,从这一点也可以看到宏函数的优势。

因为是文本的替换,因此他与类型也没有关系,不过类型不对应,会在编译阶段的时候报错,这点还是具备利用价值的。

另外,还有一些任务根本无法用函数实现****,但是用宏定义却很好实现。

比如参数类型没法作为参数传递给函数,但是可以把参数类型传递给带参的宏。

看下面的例子:

#define MALLOC(n, type )((type ) malloc((n)sizeof( type )))

利用这个宏,我们就可以为任何类型分配一段我们指定的空间大小,并返回指向这段空间的指针。我们可以观察一下这个宏确切的工作过程:

int *ptr;
ptr = MALLOC ( 5, int );
//将这宏展开以后的结果:
ptr = (int *) malloc ((5) * sizeof(int));

这个例子是宏定义的经典应用之一,完成了函数不能完成的功能,但是宏定义也不能滥用,通常,如果相同的代码需要出现在程序的几个地方,更好的方法是把它实现为一个函数。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4299

    浏览量

    62352
  • 代码
    +关注

    关注

    30

    文章

    4733

    浏览量

    68286
  • 预处理
    +关注

    关注

    0

    文章

    33

    浏览量

    10469
收藏 人收藏

    评论

    相关推荐

    开环和闭环功放的区别,优缺点,应用场合什么不同?

    问下TI的工程师,开环和闭环功放的区别,优缺点,应用场合什么不同?请解释下,谢谢!
    发表于 11-04 06:33

    请问Pre-Filter PBTL和Post-Filter PBTL相比什么优缺点

    Pre-Filter PBTL和Post-Filter PBTL 相比什么优缺点
    发表于 10-18 06:54

    带你了解无刷电机与刷电机的优缺点

    无刷电机和刷电机各有其独特的优缺点,选择哪种电机类型取决于具体的应用场景和需求。
    的头像 发表于 09-21 11:24 610次阅读

    运放恒流源哪些优缺点

    运放恒流源,即利用运算放大器(Operational Amplifier,简称运放)构成的恒流源电路,具有一系列独特的优点和缺点。以下是对其优缺点的详细分析。
    的头像 发表于 08-28 10:18 773次阅读

    GaN HEMT哪些优缺点

    GaN HEMT(氮化镓高电子迁移率晶体管)作为一种先进的功率半导体器件,在电力电子、高频通信、汽车电子等多个领域展现出了显著的优势,但同时也存在一些缺点。以下是对GaN HEMT优缺点的详细分析:
    的头像 发表于 08-15 11:09 830次阅读

    同步整流的优缺点哪些

    同步整流是一种在数字电路设计中常用的技术,它通过将电路中的所有信号同步到一个共同的时钟信号上,来实现信号之间的同步。这种技术在数字电路设计中具有重要的作用,但同时也存在一些优缺点。以下是对同步整流
    的头像 发表于 07-09 09:09 776次阅读

    机器视觉控制的优缺点哪些

    机器视觉控制是一种利用计算机视觉技术对机器进行控制的方法,它在工业自动化、机器人技术、智能交通等领域得到了广泛应用。然而,机器视觉控制也存在一些优缺点。本文将详细介绍机器视觉控制的优缺点。 一、机器
    的头像 发表于 07-04 10:43 638次阅读

    数学建模神经网络模型的优缺点哪些

    、预测分析等。然而,神经网络模型也存在一些优缺点。本文将详细分析神经网络模型的优缺点。 一、优点 强大的非线性拟合能力 神经网络模型具有强大的非线性拟合能力,可以很好地处理复杂的非线性问题。传统的线性模型在处
    的头像 发表于 07-02 11:36 780次阅读

    nbiot和lora的优缺点是什么?

    nbiot和lora的优缺点
    发表于 06-04 06:37

    常用的交换芯片的优缺点哪些

    常用的交换芯片在网络通信中扮演着至关重要的角色,它们负责高速、高效地处理数据转发和交换任务。然而,每种交换芯片都有其独特的优缺点,这取决于其设计、制造工艺以及应用场景。
    的头像 发表于 03-22 16:36 861次阅读

    什么是边缘计算?边缘计算技术哪些优缺点

    什么是边缘计算?边缘计算技术哪些优缺点? 边缘计算是一种将计算和数据处理能力从传统的云计算数据中心移动到离数据源更接近的位置的计算模型。在边缘计算中,数据处理和分析都在离数据产生的地
    的头像 发表于 02-06 14:38 1576次阅读

    滤波电容不同补偿方式优缺点对比

    滤波电容不同补偿方式优缺点对比  滤波电容是电子电路中常用的元件,用于对信号进行滤波处理。不同的补偿方式可以帮助提高滤波电容的性能和稳定性。本文将详细介绍几种常见的滤波电容补偿方式的优缺点。 首先
    的头像 发表于 01-04 16:00 1079次阅读

    C语言哪些预处理操作?

    C语言的预处理是在编译之前对源代码进行处理的阶段,它主要由预处理器完成。预处理器是一个独立的程序,它负责对源代码进行一些文本替换和处理,生成
    的头像 发表于 12-08 15:40 576次阅读
    C语言<b class='flag-5'>有</b>哪些<b class='flag-5'>预处理</b>操作?

    刷电机和无刷电机的优缺点

    刷电机和无刷电机的优缺点  刷电机和无刷电机是现代电机中常见的两种类型,它们在结构、工作原理、性能方面存在一些差异。本文将详细介绍刷电机和无刷电机的
    的头像 发表于 12-08 10:10 1.4w次阅读

    常见开关电源优缺点对比

    常见开关电源优缺点对比
    的头像 发表于 12-07 15:30 660次阅读
    常见开关电源<b class='flag-5'>优缺点</b>对比