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

    文章

    4326

    浏览量

    62558
  • 代码
    +关注

    关注

    30

    文章

    4776

    浏览量

    68507
  • 预处理
    +关注

    关注

    0

    文章

    33

    浏览量

    10477
收藏 人收藏

    评论

    相关推荐

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

    问下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 745次阅读

    运放恒流源哪些优缺点

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

    放大器增益调节哪些优缺点

    放大器增益调节的优缺点是多方面的,这些方面涉及到放大器的性能、应用、设计以及实际使用中的挑战。
    的头像 发表于 08-16 17:14 784次阅读

    GaN HEMT哪些优缺点

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

    同步整流的优缺点哪些

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

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

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

    神经网络算法的优缺点哪些

    神经网络算法是一种模拟人脑神经元结构的计算模型,广泛应用于机器学习、深度学习、图像识别、语音识别等领域。然而,神经网络算法也存在一些优缺点。本文将详细分析神经网络算法的优缺点。 一、神经网络算法
    的头像 发表于 07-03 09:47 1317次阅读

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

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

    直线电机哪些优缺点

    随着现代工业的快速发展,对于直线运动控制的需求日益增加。直线电机作为一种新型的驱动装置,因其独特的结构和性能优势,正在逐步取代传统的旋转电机和滚珠丝杠,成为直线运动控制的主流选择。本文将对直线电机的优缺点进行详细分析,并探讨其在实际应用中的注意事项。
    的头像 发表于 06-11 18:00 2439次阅读

    nbiot和lora的优缺点是什么?

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

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

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

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

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

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

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