inline内联函数 内联函数和宏定义的区别?
内联函数和宏定义的区别?
内联函数和宏的区别:传统的宏定义函数可能会带来一些麻烦。例如:#define f(x)x x void main(){int i=1F(i)},其中x将被添加两次。内联函数由编译器以函数的形式自动添加到代码中,这是不会发生的。内联函数的使用提高了效率(节省了大量的函数调用汇编代码,如call和RET)。
C 中,内联函数和宏定义的区别是什么?
宏是一个简单的字符串替换。如果可能,内联函数被嵌入到编译器调用函数的位置,这在逻辑上是正确的。此外,宏扩展必须被替换,当编译器认为内联函数不能被嵌入时,内联函数被编译为普通函数。
内联函数相比宏定义增加空间开销吗?
内联函数是C为解决使用宏定义的一些缺点而引入的一种机制。
1. 为什么要引入内联函数(内联函数的函数)
来代替宏定义,消除宏定义的缺点。宏定义是由预处理器实现的,它进行了一些简单的字符替换,无法检测参数的有效性。此外,它的返回值不能强制转换为合适的类型,C中引入了类和类访问控制,当涉及到类的受保护成员和私有成员时,不能通过宏定义进行操作。
2. 内联函数与宏定义相比有哪些优点!](1)内联函数的代码放入符号表中,使用时像宏一样展开,效率高,无需调用开销;(2)内联函数是实函数,需要进行一系列的数据类型检查;(3)内联函数是类,内联函数可以使用该类的受保护成员和私有成员;
3。内联函数的使用
](1)内联函数可以在任何使用宏定义的地方使用;
(2)作为类成员接口函数读写类的私有或受保护成员;
4。为什么不能把所有函数都写成内联函数
内联函数以复杂代码为代价提高了执行效率,从而节省了函数调用的成本。因此,一方面,如果内联函数的内部代码的执行时间大于函数调用的执行时间,则意义不大;另一方面,内联函数的每次调用都需要复制代码,占用更多的内存空间,因此,在以下情况下不适合使用内联函数。
(1)函数体中的代码比较长,会导致内存消耗的代价;
(2)函数体中有循环,因此函数的执行时间比函数调用的执行时间要长,类的构造和析构函数不应作为内联函数编写。
5. 内联函数与宏定义的区别
](1)内联函数在编译时展开,宏在预编译时展开;(2)内联函数直接嵌入目标代码,宏是简单的文本替换;(3)内联函数有类型检测、语法判断等功能,但宏不;
(4)内联函数是函数,宏不是;
(5)宏定义要注意写(参数要围起来)否则,很容易有歧义,内联函数就不会有歧义;
宏和内联函数的区别是什么?
宏做了一个简单的字符串替换,编译前用宏体替换宏名称。首先,内联函数是一个函数,它将传递参数并在编译后执行。其次,作为内联函数,它是将一个非常简单的函数“嵌入”到调用程序代码中,以减少时间和空间开销。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。