宏定义、内联函数、普通函数的区别

原创 2016年08月31日 10:01:51

宏定义和内联函数的区别:

第一:宏定义时在预处理阶段进行代码替换,而内联函数在编译阶段进行代码替换。

第二:宏定义没有类型检查,而内联函数有类型检查。


内联函数和普通函数最大的区别是在内部实现方面上:

普通函数在被调用时,系统首先要跳跃到该函数的入口地址,执行函数体,执行完成后,再返回到函数调用的地方,函数始终只有一个复制而内联函数则不需要一个寻址过程,当执行到内联函数时,内联函数像宏一样展开,如果在N处调用了内联函数,则此函数就会有N个代码段的复制。编译器会在内联函数调用的地方,将内联函数的内容展开,避免了函数调用的开销,又没有宏机制的缺陷。执行速度比一般的函数执行速度要快。


内联函数本身不能直接调用递归函数。只适合函数体内简单代码的使用。


任何在类的说明部分定义的函数都会被自动的认为是内联函数。内联函数必须是函数体声明在一起,才有效。像这样的的声明 Inline Function(int i)是没有效果的,编译器只是把函数作为普通函数的声明,我们必须定义函数体。


内联函数的调用必须出现在第一次被调用之前。


在类的内部定义了函数体的函数,被默认是内联函数,而不管是否有inline关键字修饰。


内联函数也有一定的局限性,如果函数体过大,编译器会放弃内联方式,而采用普通的方式调用函数。内联函数是以增加空间的消耗为代价的,是否需要inline函数就需要根据实际情况取舍。


inline一般只用于如下情况:

1) 一个函数不断被重复调用。

2)函数只有简单的几行,且函数不包含for、while、switch语句。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

内联函数和宏定义的区别

用内联取代宏: 1.内联函数在运行时可调试,而宏定义不可以; 2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;  3.内联函数可以访问类的成员变量,宏...

内联函数和宏定义的区别

用内联取代宏:1.内联函数在运行时可调试,而宏定义不可以; 2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义...

C++内联函数与宏定义的区别

用内联取代宏: 1.内联函数在运行时可调试,而宏定义不可以; 2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;  3.内联函数可以访问类的成员变量,宏...

内联函数和宏定义的区别

用内联取代宏: 1.内联函数在运行时可调试,而宏定义不可以; 2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;  3.内联函数可以访问类的成员变量,宏...

宏定义和内联函数的区别

在程序员面试宝典第三版的6.4中,有个问题,内联函数和宏的差别是什么?      由此,我们想到为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的...

内联函数和宏定义的区别

用内联取代宏: 1.内联函数在运行时可调试,而宏定义不可以; 2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;  3.内联函数可以访问类的成员变量,宏...

内联函数和宏定义的区别

用内联取代宏: 1.内联函数在运行时可调试,而宏定义不可以; 2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;  3.内联函数可以访问类的成员变量,宏...

内联函数和宏定义的区别

用内联取代宏: 1.内联函数在运行时可调试,而宏定义不可以; 2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;  3.内联函数可以访问类的成员变量,宏...

内联函数和宏定义的区别

用内联取代宏: 1.内联函数在运行时可调试,而宏定义不可以; 2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;  3.内联函数可以访问类的成员变量,宏...

内联函数和宏定义的区别

转载来源:http://blog.csdn.net/gao675597253/article/details/7397373 1. 内联函数和宏定义的区别: 1.1 内联函数在运行时可调试,而宏定义不...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)