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

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

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

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

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


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

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


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


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


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


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


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


inline一般只用于如下情况:

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

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

C++中宏定义和内联函数区别

1. 宏代码不是函数
  • cgl1079743846
  • cgl1079743846
  • 2014年05月27日 00:45
  • 2419

面试---内联函数和宏定义的区别

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

内联函数与普通函数有什么区别

 内联函数和普通函数相比可以加快程序的运行的速度,因为在调用内联函数时,不需要中断,在编译的时候直接将内联函数镶嵌到目标代码中。内联是以增加空间消耗为代价,换取时间开销。宏只是一种简单代码的替换。  ...
  • xiaoyan_cug
  • xiaoyan_cug
  • 2007年12月25日 14:32
  • 290

内联函数与普通函数、成员函数与静态函数的区别(知识整理)

内联函数与普通函数的区别普通函数在编译的过程中由编译器将函数体放入代码段,在调用函数过程中先进行参数的压栈,然后根据函数的调用地址调用函数,并执行,函数返回后执行出栈操作,这样就会有一个调用的过程,会...
  • zhaoze87
  • zhaoze87
  • 2010年08月25日 11:57
  • 1276

内联函数与普通函数区别&可执行文件结构介绍

一些基本知识回顾: 1、内联函数与普通函数的区别: 普通函数在编译后会被放到代码段,然后函数执行过程中调用普通函数是需要先压栈,然后根据函数调用地址调用函数,函数返回后执行出栈...
  • u011757360
  • u011757360
  • 2014年09月21日 00:15
  • 719

函数式宏定义和普通函数的区别

在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数、表达式、格式串等。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。...
  • wang664626482
  • wang664626482
  • 2016年08月29日 16:22
  • 1271

比较函数式宏定义和普通函数的区别

比较函数式宏定义和普通函数的区别: 函数式宏定义:#define MAX(a,b) ((a)>(b)?(a):(b)) 普通函: MAX(a,b) { return a>b?a:b;}   ...
  • ghost663527
  • ghost663527
  • 2015年04月18日 19:27
  • 1139

C语言里面的内联函数(inline)与宏定义(#define)探讨

http://huxiongwei.spaces.eepw.com.cn/articles/article/item/85841 C语言里面的内联函数(inline)...
  • wangyin159
  • wangyin159
  • 2014年07月08日 21:06
  • 1007

内联函数、普通函数、宏定义

对于一个频繁使用的短小函数,c用宏定义,c++用inline实现。 一、宏定义和内联函数的区别 1、宏定义只是普通的文本替换,宏定义是没有类型检查的,无论对还是错都是直接替换。所以宏替换容易出错,...
  • RUN32875094
  • RUN32875094
  • 2017年10月18日 16:26
  • 65

inline函数与普通函数的区别

inline函数与普通函数的区别举例以下例子均是在比较老的gcc中比较普遍的例子,只是方便理解,实际上gcc等编译器现在已经能够识别部分短小函数自动将其变为内联函数。普通函数int g(int x) ...
  • qq_15437667
  • qq_15437667
  • 2016年01月07日 00:35
  • 1459
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:宏定义、内联函数、普通函数的区别
举报原因:
原因补充:

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