-
宏函数定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,传参需要小心。
和普通函数比省去了分配和释放栈帧、传参、传返回值等一系列工作
-
简短并且被频繁调用的函数经常用函数式宏定义来代替实现
-
函数式宏定义要注意格式,尤其是括号
-
宏函数:编译时浪费时间,没有语法检查不安全,
普通函数:有语法检查,但是浪费空间
相关推荐
宏定义和函数调用的区别
详细罗列出宏定义和函数调用的区别,很全。。。
【C/C++内功心法】详解宏和函数的区别
1.每次使用时,宏代码都会被插入到程序中。除了非常小的宏之外,程序的长度会大幅度增长。函数代码只出现于一个地方;每次使用这个函数时,都调用那个地方的同一份代码。2.宏的执行速度更快。函数的调用和返回的会有额外开销,所以相对慢一些。3.宏的参数与类型无关,只要对参数的操作是合法的, 它就可以使用于任何参数类型。函数的参数是与类型有关的,如果参数的类型不同,就需要不同的函数,即使他们执行的任务是不同的。
深入探讨:宏、内联函数与普通函数的区别
本篇文章是对宏、内联函数与普通函数的区别进行了详细的分析介绍,需要的朋友参考下
宏和函数的区别
宏和函数的区别: 宏相对于函数的优点: 1、在运行速度上宏要比函数的运行速度快, 函数需要调用并且返回值这个过程,而宏却不需要。 2、在参数的类型定义上,宏没有类型要求,适合于任何能用>号比较的类型,而函数的参数必须声明特定的类型。 3、宏还有一个特殊的地方,宏可以接受类型作为参数。 函数相对于宏的优点: 1、如果一个函数要被调用很多次,使用函数可以省略很多不必要的内容,而每次使用宏,宏定义则需要重复的写上好几遍。 2、也正因为宏没有类型要求,所以函数比较于宏来说更加的严谨。 3、函数
DGX Spark上PyTorch GPU环境配置实战:CUDA 13.0与ARM架构全流程
在深度学习中,CUDA作为GPU加速计算的底层基础,其版本与深度学习框架(如PyTorch)的匹配直接影响模型训练的效率与稳定性。GPU环境配置不仅涉及驱动、CUDA工具链与框架运行时的协同,还依赖于硬件架构与预构建包的兼容性。在AI开发机Ubuntu系统上,正确对齐CUDA版本、计算能力架构及安装源,是避免环境故障、发挥硬件算力的关键。无论是面向个人AI超算还是通用GPU服务器,掌握版本对齐、路径隔离与验证方法,都能大幅提升开发效率。本文以DGX Spark为例,详解从环境摸底到PyTorch GPU版本
Matcap与菲涅尔
菲尼尔效果(简化版公式):fresnel = base + scale*((1-v*n)^power)透明队列为后前渲染,不关闭深度写入则会覆盖之前的像素,导致混合不了。y的值为0~1,根据x3返回对应y值。两色混合做个demo看看!混合为什么要关闭深度写入?
宏与函数的区别
1.带参数的宏定义的参数没有类型,
蚁群算法(Ant Colony Optimization,ACO)讲解+代码实现
通常情况下,较优的解对应的路径上的信息素会被加强,而较差解对应的信息素则会减少或蒸发。的化学物质,这种物质会在蚂蚁走过的路径上留下痕迹,后续的蚂蚁会根据这些信息素的浓度来选择路径,从而形成一条从蚁巢到食物源的。在求解TSP蚁群算法中,每只蚂蚁相互独立,用于构造不同的路线,蚂蚁之间通过信息素进行交流,合作求解。的过程,该路段经过的蚂蚁越多,信息素留下的就越多,浓度越高,更多的蚂蚁都会选择这个路段。需要注意的是,蚁群算法是一种。(6)计算每只蚂蚁的总距离:遍历每只蚂蚁的路线,累加经过的城市之间的距离。
宏函数与普通函数的比较
一. 计算机中的宏
LDA主题模型简介及Python实现
一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来代表文档。词袋模型介绍可以参考这篇文章:文本向量化表示——词袋模型 - 知乎 了解LDA模型,我们需要先了解LDA的生成模型,LDA认为一篇文章是怎么形成的呢? LDA模型认为主题可以由一个词汇...
CODESYS Softmotion(一)功能介绍
一、CODESYS SoftMotion RTE SL产品 1.1 CODESYS Runtime SL 产品家族介绍 目前支持的主流厂商的硬件产品,让部署在上面的成为实时设备。 对于Windows系统,根据需求选择对应的Runtime: RTE极大的提高了实时性,适合进行运动控制,同时RTE还支持了多个主从站协议: 还可以选择可选的功能(Single License): RTE对硬件和系统有要求,如果你需要硬件功能,那么网卡会有最低要求。 1.2 RTE的下载和安装 在官网http://codes
普通函数和宏函数的区别
普通函数和宏函数的区别主要从时间和空间上分析 宏函数:编译时浪费时间,没有语法检查不安全 不占用空间 普通函数:有语法检查,但是浪费空间...
QOpenGL入门教程(二)—— 第一个QOpenGLWidget程序
终于到了实际操作的环节了,这一章我们要做的是: 创建OpenGL窗口 创建并编写着色器程序 为着色器程序装配顶点数据 启动渲染管线进行绘图 第一步:创建新项目 首先,我们使用Qt创建一个常规的QWidget项目,建议不要勾选ui设计器(个人习惯,笔者不太习惯于使用ui来设计) 第二步:创建QOpenGLWidget并实现三个虚函数 QOpenGLWidget Qt5.4之前,Qt可以通过一个QGLWidget类来创建OpenGL窗口,但由于opengl的发展,在5.4版本的时候,Qt提供
C 语言基础-宏定义(浅谈有参和无参宏定义,宏函数与普通函数的区别)
什么是宏定义?都能用它来做什么?有什么使用注意点?
STM32F4 SPI FLASH(W25Q128)驱动详解(含DMA+完整读写擦除+低功耗)
本文实现了一款基于STM32 HAL库的SPI Flash驱动,以W25Q128为例,提供了完整的初始化、读写、擦除、ID读取等功能。驱动集成了DMA传输、超时保护、页对齐写入等特性,支持扇区擦除、整片擦除、页写入及跨页缓冲写入。代码结构清晰,易于移植到其他SPI Flash型号(如W25Q64、W25Q16等),适用于数据存储、固件升级、文件系统等嵌入式场景。
(十五)CX20106A 中超声波测量的应用
(十五)CX20106A 中超声波测量的应用
宏函数、内联函数、普通函数的区别
宏函数、内联函数、普通函数的区别刚刚面世完,上来就问宏函数和普通函数的区别,整理一下;本文为本人的第一篇博客,各位大虾多多指点 宏函数:在C语言中用的比较多,C++中用的比较少,宏函数只是在预编译阶段做简单的替换,所以不会为函数调用带来额外的开销(不必开辟一段栈空间),没了这种开销,就可以提高代码执行的效率。但是仅仅简单的替换也会带来很多问题。
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
C语言:宏定义函数
通过一个比较函数的例子来说明宏函数和普通函数的区别: 宏函数形式: #define MAX( a, b) ( (a) > (b) (a) : (b) ) //这里为什么有这么多括号,后面会讲 普通函数形式: int max(int a, int b) { return (a > b a : b) } 宏函数 优点:节省空间(给形参节省) 缺点:浪费时间(主要...
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
C语言系列——#define 宏函数
在 C 语言中,#define 可以通过带参数的宏定义来模拟函数的功能(称为 “宏函数”),其本质是在预处理阶段进行文本替换,而非真正定义函数。宏函数的优势是避免函数调用的开销(适合简单逻辑),但也存在一些局限性(如无类型检查、可能产生副作用)。
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
【C】宏函数VS函数
宏函数的作用和函数有些许类似,但本质上还是不一样的。
内联函数、宏函数、普通函数的区别
内联函数:inline 函数类型 函数名 (函数入参) 定义:用修饰符inline修饰的函数称为内联函数。 和普通函数的定义和声明相同。和普通函数相同会做类型检查,安全。 在编译的过程中,不是跳转到内联函数定义的地方去,而是将内联函数里面的代码拷贝到调用的地方去执行(嵌套到目标代码的调用的位置),节省时间,但是却增加了目标代码的代码量(牺牲了代码的存储空间,节省了运行时间)。
预处理指令详解:宏常量、宏函数,条件编译
目录 预处理指令 查看预处理过程 预处理指令的分类 #include文件包含 #define定义宏 宏常量 预定义的宏 宏函数 宏函数的二义性 如何避免二义性 区分#define与typedef 宏函数与普通函数的区别? 是什么? 有什么不一样? 条件编译 版本控制 ...
【C++】Inline函数、普通函数、static修饰的函数、宏函数的区别
1.inline函数 在编译阶段,调用点展开,所以导致只能本文件可见 和普通函数最大区别在于内部实现方式 没有栈帧的开辟和回退,一般直接把内联函数写在头文件 调用时在编译期直接代码展开,不会生成符号不需要寻址,使用循环、递归、switch的函数不能声明为内联 内联函数往往替换函数体较小的函数 内联只是对编译器的建议,最终不一定成功 编译阶段有类型检查、安全检查 可以调试 Inli...
参数宏、宏函数与内联函数:
宏名无类型,它的参数也无类型,只是一个符号代表,展开时带入指定的字符即可。宏定义时 ,可以是任何类型的数据。3.inline关键字只是对编译器的一个定义,如果函数不符合内联函数的标准,编译器就会把这个函数当成普通函数。3 函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。,因为每展开一次都使程序增长,而函数调用不使源程序变长。而使用带参的宏只是进行简单的。的,分配临时的内存单元;2.有参数检测更安全。
C++ | 内联函数
内联函数在编译时进行展开,在调用点出产生一个函数体代码的拷贝。因此,对内联函数进行任何修改后,都需要对所有调用该函数的模块进行重新编译,否则它将会继续使用旧的函数。 如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编译器会忽略 inline 限定符。 内联函数的作用: 引入内联函数的目的是为了解决程序中函数调用的效率问题,函数的调用会有函数栈帧的开辟和函数内资源的回收处理产生的开销。如果函数功能比较简单,如整数比较大小函
3997



被折叠的 条评论
为什么被折叠?



