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

    文章

    3882

    浏览量

    61310
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66800
  • 预处理
    +关注

    关注

    0

    文章

    32

    浏览量

    10411
收藏 人收藏

    评论

    相关推荐

    储能元件的分类和优缺点

    常见的PCS储能用的是电池,磷酸铁锂,锂电池等材料,但是也有用电容储能的,比如用无极性大电容和超级法拉电容的。 1、请问用电池储能和电容储能那种效率更高?两者各有什么优缺点? 2、在储能过程中,储
    发表于 03-11 23:03

    开关电源的工作模式什么区别和优缺点

    有什么优缺点? 主要不理解的就是开关电源主要储能器件磁芯的设计,哪种工作模式会导致磁芯在多次开关管储能释放能量之后会导致饱和,影响开关电源工作? 临界模式对磁芯的设计有什么要求,与连续模式什么区别? 断续工作模式是否是最常用的工作模式,在反激式开关电源中是否经常用断续工
    发表于 03-06 21:47

    C语言有哪些预处理操作?

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

    常见开关电源优缺点对比

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

    PCB表面处理工艺OSP的优缺点

    一站式PCBA智造厂家今天为大家讲讲PCB制板表面处理工艺OSP有什么作用?PCB制板表面处理工艺OSP的优缺点。OSP即有机保焊膜,又称护铜剂,其主要是对暴露在空气中的铜起到一定的保护作用,这是
    的头像 发表于 11-15 09:16 672次阅读

    大神就教:芯片焊线斜着打和竖着打什么优缺点

    大神就教:芯片焊线斜着打和竖着打什么优缺点
    发表于 10-27 16:59

    对cortex m系列开发来说,gnu系工具链和keil相比哪些优缺点

    对cortex m系列开发来说,gnu系工具链和keil 相比哪些优缺点
    发表于 10-20 06:28

    电阻式触摸屏的原理及优缺点

    电子发烧友网站提供《电阻式触摸屏的原理及优缺点.pdf》资料免费下载
    发表于 10-08 10:16 1次下载
    电阻式触摸屏的原理及<b class='flag-5'>优缺点</b>

    igbt的优缺点介绍

    igbt的优缺点介绍 IGBT的优缺点介绍 IGBT是一种晶体管,是MOSFET和BJT集成而成的开关,具有高速开关能力和较低的导通电阻,用于高效率的功率调节。IGBT具有一些优点和缺点,下面将详细
    的头像 发表于 08-25 15:03 4904次阅读

    石墨烯电池的优缺点是什么?

    石墨烯电池的优缺点是什么?  石墨烯是一种具有极高导电性、热导性和物理可塑性的材料,可以被用于制造各种电子设备和材料。石墨烯电池是一种基于石墨烯技术的电池,与传统的电池相比,具有一些独特的优缺点
    的头像 发表于 08-22 17:06 3.3w次阅读

    数字电源和开关电源的优缺点

    电源的优缺点 数字电源是一种基于数字信号处理的电源。它使用数字信号控制模拟电路的输出,可以实现很高的精度和可编程性。数字电源有以下优缺点: 1. 优点: (1)高精度:数字电源使用数字信号控制模拟电路的输出,具有高精度
    的头像 发表于 08-18 15:01 1480次阅读

    基于磁贴的GPU架构优缺点

    本指南介绍了基于磁贴的GPU架构的优缺点。它还将ARM马里基于瓷砖的GPU架构设计与台式PC或控制台中常见的更传统的即时模式GPU进行了比较。 马里GPU使用基于平铺的渲染体系结构。这意味着GPU
    发表于 08-02 12:54

    共地和分地的优缺点

    共地与分地并没有硬性规定,可以按需求自己设计。这里归纳一下他们的优缺点。 分地不容易短路。但是地与地与正极与负载之间容易形成电压差。形成奇怪的故障现象。 共地,拥有稳定的二进制表现,即稳定的直流表现
    发表于 06-27 16:48

    C语言预处理命令哪些?

    往往我说今天上课的内容是预处理时,便有学生质疑:预处理不就是include 和define么?这也用得着讲啊?。是的,非常值得讨论,即使是include 和define。但是预处理仅限于此吗?远远
    发表于 06-25 06:15

    双电芯电池的优缺点

    双电芯电池是一种由两个电池单元组成的电池。这种电池通常由两个相同的电池单元并联而成,以提供更高的电压和/或更长的使用时间。与单电池相比,双电芯电池具有许多优点和一些缺点。本文将介绍双电芯电池的优缺点
    的头像 发表于 06-20 17:29 8305次阅读