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

    文章

    4408

    浏览量

    66946
  • 代码
    +关注

    关注

    30

    文章

    4947

    浏览量

    73265
  • 预处理
    +关注

    关注

    0

    文章

    33

    浏览量

    10766
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    锂电池制造 | 电芯预处理工艺的步骤详解

    电芯预处理是锂电池包制造的首要工序,无论是新能源汽车的续航稳定性,还是储能系统的循环寿命,其根基都可追溯至预处理工序对电芯一致性的把控,其核心在于通过系统检测与筛选消除量产电芯的性能差异,为后续组装
    的头像 发表于 08-11 14:53 965次阅读
    锂电池制造 | 电芯<b class='flag-5'>预处理</b>工艺的步骤详解

    PCBA 表面处理优缺点大揭秘,应用场景全解析

    一站式PCBA加工厂家今天为大家讲讲PCBA加工如何选择合适的表面处理工艺?PCBA表面处理优缺点与应用场景。在电子制造中,PCBA板的表面处理工艺对电路板的性能、可靠性和成本都有重要
    的头像 发表于 05-05 09:39 1155次阅读
    PCBA 表面<b class='flag-5'>处理</b>:<b class='flag-5'>优缺点</b>大揭秘,应用场景全解析

    3D打印耗材种类哪些?各有什么优缺点

    这篇文章将为你详细介绍3D打印耗材的基础知识,帮助你了解这些材料的特性、优缺点以及它们适合的应用场景。
    的头像 发表于 04-29 09:40 2.4w次阅读
    3D打印耗材种类<b class='flag-5'>有</b>哪些?各有什么<b class='flag-5'>优缺点</b>?

    FPGA Verilog HDL语法之编译预处理

    Verilog HDL语言和C语言一样也提供了编译预处理的功能。“编译预处理”是Verilog HDL编译系统的一个组成部分。Verilog HDL语言允许在程序中使用几种特殊的命令(它们不是一般
    的头像 发表于 03-27 13:30 1127次阅读
    FPGA Verilog HDL语法之编译<b class='flag-5'>预处理</b>

    CMOS,Bipolar,FET这三种工艺的优缺点是什么?

    在我用photodiode工具选型I/V放大电路的时候,系统给我推荐了AD8655用于I/V,此芯片为CMOS工艺 但是查阅资料很多都是用FET工艺的芯片,所以请教下用于光电信号放大转换(主要考虑信噪比和带宽)一般我们用哪种工艺的芯片, CMOS,Bipolar,FET这三种工艺的优缺点是什么?
    发表于 03-25 06:23

    压接连接器使用裸铜线的优缺点分析?

    压接连接器使用裸铜线是一种高效、可靠的电气连接方式,广泛应用于电力、通信和工业领域。需要我们正确看待它的优缺点,高效使用。
    的头像 发表于 03-18 11:01 859次阅读

    浅谈汽车系统电压优缺点分析

    以下是12V、24V、48V系统的简单介绍,包括技术特点、优缺点及典型应用场景。汽车电气系统的发展随着车辆电子设备的增多和对能效要求的提高,电压等级也在逐步提升,从传统的12V电
    的头像 发表于 03-06 08:04 1379次阅读
    浅谈汽车系统电压<b class='flag-5'>优缺点</b>分析

    惠斯通电桥的优缺点分析

    惠斯通电桥作为一种经典的电阻测量工具,具有其独特的优缺点。以下是对惠斯通电桥优缺点的详细分析: 优点 高精度 : 惠斯通电桥通过比较电压差来精确测量电阻值,对于微小的电阻变化也能迅速作出反应,因此
    的头像 发表于 02-13 15:26 2077次阅读

    BP神经网络的优缺点分析

    BP神经网络(Back Propagation Neural Network)作为一种常用的机器学习模型,具有显著的优点,同时也存在一些不容忽视的缺点。以下是对BP神经网络优缺点的分析: 优点
    的头像 发表于 02-12 15:36 1640次阅读

    硅谷物理服务器的优缺点分析

    硅谷物理服务器因其高性能、高质量和先进的技术支持而在全球范围内享有很高的声誉。硅谷物理服务器的优缺点分析如下,主机推荐小编为您整理发布硅谷物理服务器的优缺点分析。
    的头像 发表于 02-12 09:30 575次阅读

    香港主机托管和国内主机的优缺点比较

    香港主机托管和国内主机(以大陆主机为例)的优缺点比较,主机推荐小编为您整理发布香港主机托管和国内主机的优缺点比较,希望对您有帮助。
    的头像 发表于 02-05 17:42 707次阅读

    东京站群服务器哪些优缺点

    东京站群服务器,作为部署在东京地区的服务器集群,专为站群优化而建,其优缺点如下,主机推荐小编为您整理发布东京站群服务器哪些优缺点
    的头像 发表于 02-05 17:39 607次阅读

    光纤通道衰耗正常范围,光纤通道优缺点

    在数据通信领域,光纤通道以其高速率、大带宽、低衰减和高可靠性等优势,逐渐成为现代数据中心和企业网络中的首选解决方案。然而,光纤通道的衰耗问题及其优缺点的理解,对于确保系统的稳定性和性能至关重要。本文将深入探讨光纤通道的衰耗正常范围,同时详细分析其优缺点
    的头像 发表于 01-29 15:26 2466次阅读

    光谱传感器的优缺点

    光谱传感器是一种能够检测并响应光谱范围内不同波长光线的传感器。以下是对其优缺点的详细分析:
    的头像 发表于 01-27 15:28 1291次阅读

    DFT的优缺点比较 DFT在机器学习中的应用

    DFT(离散傅里叶变换)的优缺点比较 优点 频域分析 :DFT能够将信号从时域转换到频域,这对于分析信号的频率成分非常有用。 线性和时不变性 :DFT是线性和时不变的,这意味着它满足叠加原理,对于
    的头像 发表于 12-20 09:22 3449次阅读