<c++基础(6)>宏定义与函数的区别

server/2024/11/15 5:53:58/

最近需要使用openvino封装动态库,其中存在一个问题是openvino和windows.h之间的冲突,其主要是minwaindef.h中的宏定义引起的。所以好奇为什么使用宏定义处理函数过程。

//minwaindef.h中关于min、max的宏定义
#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif#ifndef min
#define min(a,b)            (((a) < (b)) ? (a) : (b))
#endif

宏定义和函数各有优势,取决于具体的应用场景和需求:

  1. 性能:宏定义在编译时展开,没有函数调用的开销,因此在性能要求高、频繁调用的场景下,宏定义通常比函数更高效。
  2. 灵活性:宏定义可以进行参数化,能够处理不同类型的参数,而函数需要在定义时确定参数类型。这使得宏定义在一些需要动态生成代码或处理复杂表达式的情况下更为灵活。
  3. 内联展开:宏定义可以实现代码的内联展开,将代码直接插入到调用处,避免了函数调用的开销和跳转。这对于一些简单的、频繁调用的函数来说是非常有利的。
  4. 代码可读性:函数通常比宏定义更具有可读性和可维护性,因为函数可以提供更清晰的结构和命名,减少了代码的冗余和错误。
  5. 作用域:宏定义的作用域是整个文件,而函数可以通过静态关键字限定作用域,避免命名冲突和不必要的暴露。

总体来说,在对性能要求高、需要灵活处理参数、希望进行内联展开以提高效率的情况下,宏定义比函数更有优势。而在强调代码可读性、可维护性以及需要复用代码块的情况下,函数通常更适合。


http://www.ppmy.cn/server/18277.html

相关文章

ELK 日志分析系统(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释&#xff0c;Kiabana 服务的默认监听端口为5601 server.po…

设计模式之命令模式

一、详细介绍 命令模式是一种行为型设计模式&#xff0c;它将“请求”封装为一个对象&#xff0c;使得使用请求、参数化请求、队列请求、撤销请求、日志请求等多种请求变得简单。命令模式通过将“行为请求者”与“行为实现者”解耦&#xff0c;使得请求的发送者和接收者完全分离…

vue的v-model、v-if、v-for用react语法实现

在React中&#xff0c;没有直接对应于Vue中的v-model、v-if和v-for的指令&#xff0c;但你可以使用React的特性和组件来实现类似的功能。 1. v-model 在Vue中&#xff0c;v-model用于在表单元素和组件之间创建双向数据绑定。在React中&#xff0c;你可以使用受控组件&#xf…

【bug】vuxUI组件popup弹出框在IOS中遮罩层会遮住页面

可以增加自定义方法v-transfer-dom <div v-transfer-dom"true"><Popup v-model"showPopup"><PopupHeader :title"policyloan.docJson.title" /><div class"noticeText"><p v-for"(item, index) in po…

人脸识别开发项目汇总

1.基于FaceX-Zoo实现的人脸识别系统-CSDN博客 2.人脸识别&#xff1a;京东开源FaceX-Zoo&#xff1a;PyTorch工具箱 - 知乎 (zhihu.com) 3.人头识别-人群中准确快速的检测头部算法_在输入图像中检测人像头部的方法-CSDN博客 4.Github开源人脸识别项目face_recognition - 知乎…

SpringBoot:SpringMVC(下)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、RequestBody补充二、PathVariable三.RequestPart:四.ResponseBody五.CookieValue&#xff0c;SessionAttribute&#xff0c;RequestHeader 前言 提示&…

贪心(贪婪)算法

主要思想 贪心算法的思想主要可以概括为“总是做出当前看起来最优的选择”&#xff0c;也就是不从整体上进行考虑&#xff0c;所得到的答案是某种意义上的局部最优解&#xff0c;不一定是整体最优解。 贪心算法没有固定算法框架&#xff0c;算法设计的关键是贪心策略的选择。…

HarmonyOS开发:【基于命令行(开发环境)】

准备开发环境 在嵌入式开发中&#xff0c;很多开发者习惯于使用Windows进行代码的编辑&#xff0c;比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段&#xff0c;大部分的开发板源码还不支持在Windows环境下进行编译&#xff0c;如Hi3861、Hi3516系…