define与inline的区别
2017-11-24 20:57
197 查看
#define和inline 的区别
一、内联函数inlineinline: 内联函数对编译器提出建议,是否进行宏替换,编译器有权拒绝 ,既为提出申请,不一定会成功。
函数调用时都会产生一些额外的开销,主要是系统栈的保护、代码的传递、系统栈的恢复以及参数传递等。对于那些函数体很小、执行时间很短但又频繁使用的函数,定义为内联函数提高函数调用的效率。内联函数不是在调用时发生转移,而是在编译时将函数体嵌入到每个内联函数调用处。这样就省去了参数传递、系统栈的保护与恢复等的时间开销。
语法形式:<inline><类型标识符><被调函数名>(含类型说明的形参表)
{ 函数体 }
注意:
1.内联函数以目标代码的增加为代价来换取时间的节省。
2.内联函数在编译时被替换。
3.内联函数一般不能含有循环语句和switch语句。
4.内联函数的定义必须出现在第一次被调用之前。
5.对内联函数不能进行异常接口说明。
如果违背了上述注意点中的任意一项,编译程序就会无视关键字inline的存在,像处理一般函数一样处理,不生成扩展代码。
二、#define
#define:定义预编译时处理的宏;只进行简单的字符替换,无类型检测
不带参数的宏定义格式:#define 标识符 字符或字符串
例:#define PI 3.1415926
带参数的宏定义格式:#define 宏名(参数表) 使用参数的字符或字符串
#define SQR(x) x*x int main() { int a,k=3; a=++SQR(k+1); printf("%d\n",a); }
注意:
1.在宏扩展时,只对宏名做简单的代换,不做任何计算,也不做任何语法检查。
2.宏由编译预处理程序处理。
3.宏定义可出现在程序的任何位置。
4.在宏定义中可以使用已定义的宏名。
5.宏由编译预处理程序处理,而函数由编译程序处理。
相关文章推荐
- define和 inline的区别
- define与inline的区别
- 浅谈define与inline的区别及程序说明
- C/C++ 常见易混淆关键字区别 define/const,define/inline,malloc/new
- inline和define的特点和区别
- 请教define,const,typedef,inline的区别
- inline define区别
- C语言学习历程(五)define、inline的区别及特点
- 20140808 const和define区别 内联函数(inline) 栈和堆的地址分配 栈帧
- define与inline的区别
- define与inline的区别
- define和inline的区别
- c++中 inline与define的区别
- define和inline 的区别
- C语言中define与inline的一些小区别和用法
- define和inline 的区别
- define与const、inline、typedef的区别
- 在网上查找资料,学习define和inline的区别
- const, static, define 以及inline的区别
- define与 inline的区别