宏定义函数:

  • 预处理阶段进行简单的文本替换,没有入栈、出栈、参数传递和函数返回等等工作,执行效率明显高于普通函数,因此,简短并且被频繁调用的函数经常用宏定义函数来代替实现
  • 没有参数检查,会影响程序安全
  • 如果函数比较复杂,函数体规模比较大,使用宏定义函数就会增加程序的大小
  • 宏定义函数的调用有可能改变函数的原生语义,比如涉及到运算符优先级的函数时,调用宏定义函数可能会改变函数的原生语义,所以使用时要格外小心

普通函数:

  • 具有参数检查,压栈,出栈,参数传递等工作,程序更加安全,但是执行效率会低于宏定义函数
  • 函数体只会存在一个,每次调用都会转向函数体的位置执行函数功能,适合复杂函数的定义

宏定义函数和普通函数相关推荐

  1. 宏定义和内联函数的区别

    宏定义和内联函数都是为了使得程序减少函数的调用而花费的开销,提高了执行效率 宏定义只是作简单的文本替换,而内联函数则是在调用出展开 宏定义在预处理时作替换,而内联函数在编译时展开 内联函数会做类型.语 ...

  2. 宏定义和内联函数的学习

    宏定义可以提高效率,但是宏不是函数. 预编译通过代码复制的方式代替函数调用,省去了诸如函数压栈等系统过程,从而提高了效率.但是由于宏定义仅仅是代码替换,所以引起很多问题. #define  MAX(a ...

  3. 宏定义与预处理、函数和函数库

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.C语言预处理理论 1.由源码到可执行程序的过程 源码.c->(编译)->elf可执行程序 源码.c->(编译)-> ...

  4. Linux宏定义实现类成员函数,全面解析Linux内核的同步与互斥机制

    http://blog.csdn.net/sailor_8318/archive/2008/06/30/2599357.aspx [摘 要]本文分析了内核的同步及互斥的几种机制:原子运算符(atomi ...

  5. 6、宏定义与预处理、函数与函数库

    C语言预处理理论 由源码到可执行程序的过程 源码.c->(编译)->elf可执行程序 源码.c->(编译)->目标文件.o->(链接)->elf可执行程序 源码.c ...

  6. 带参宏定义和带参函数的区别

    在带参宏定义中,不会为形式参数分配内存,因此不必指明数据类型.而在宏调用中,实参包含了具体的数据,要用它们去代换形参,因此必须指明数据类型. 这一点和函数是不同的:在函数中,形参和实参是两个不同的变量 ...

  7. abs int 宏定义_C语言之函数与宏定义。

    需要注意的几点: 1. 储存类型符指的是函数的作用范围,它有两种形式:static和extern.static说明的函数只能作用于其所在的源文件,它又称为是内部函数:extern说明函数可以被其他源文 ...

  8. 【GCC编译优化系列】宏定义名称与函数同名是一种什么骚操作?

    作者简介 *架构师李肯(全网同名)**,一个专注于嵌入式IoT领域的架构师.有着近10年的嵌入式一线开发经验,深耕IoT领域多年,熟知IoT领域的业务发展,深度掌握IoT领域的相关技术栈,包括但不限于 ...

  9. C语言中的宏函数与宏定义

    目录 1.无参宏定义 1.1 无参数宏定义的格式: 1.2 使用说明: 2.带参宏定义 2.1 带参数宏定义的格式: 2.2 使用说明: 3.带参宏定义与函数调用的区别 4.头文件中常用的宏定义 5. ...

  10. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

最新文章

  1. curl调用WEB API
  2. 将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档,以博客形式发表在博客园...
  3. 回首向来萧瑟处,也无风雨也无晴~小祁的2018
  4. 用java画一个网格_用SolidWorks画一个空心挂钩,这种画法稍微有点麻烦
  5. 【传智播客】JavaWeb程序设计任务教程 第一章练习答案
  6. tomcat(6)生命周期
  7. uva 10771——Barbarian tribes
  8. npm install
  9. 60-200-072-使用-命令-MySQL使用mysqldumpslow分析慢查询日志文件
  10. java中的i++和++i
  11. [USACO08JAN]牛大赛Cow Contest
  12. 2022【高淇Java300集】,零基础必备课程,全新知识讲解
  13. 中科院计算所保研资料集合(更新中)
  14. 菜鸟仓库-货物格子问题编程题
  15. 我爱天文 - 月亮从哪边升出来?
  16. url rewrite 实现url地址的伪静态化
  17. 华为APP UI自动化测试岗面试真题,真实面试经历。
  18. wps怎么把字缩到最小_wps怎么把最左侧的字体变小
  19. 短信java_Java发送手机短信(附代码和解析,亲测有效,简便易操作)
  20. 考研必备100个网站

热门文章

  1. hihocoder图像算子(高斯消元)
  2. 以下未发布-Android的多线程以及异步消息处理机制,android移动开发基础案例教程源码
  3. 【uni-app】uni-app实现聊天页面功能——功能篇(下)
  4. Android调用系统原生分享组件
  5. 国密算法Go语言实现(详解)(九) ——SM2(椭圆曲线公钥密码算法)
  6. FreeFileSync命令用法
  7. 深入浅出WPF——什么是XAML
  8. IBM3650系列服务器前故障诊断面板灯显示含义
  9. ikbc键盘解锁上锁 解决win键失灵的问题
  10. shell——正则表达式