欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

内联函数和宏定义

程序员文章站 2024-03-23 14:20:16
...

内联函数

内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调试,在编译的时候内联函数可以直接被镶嵌到目标代码中去。而宏只是简单的替换。

内联函数有参数的类型检查,而宏没有类型检查。

inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。对于短小的代码来说,inline增加空间消耗换来的是效率提高,这方面和宏是一模一样的,但是inline在和宏相比没有付出任何额外代价的情况下更安全,至于是否要内联函数,就需要根据实际情况来看了,内联只是一个建议。

inline一般只用于如下情况:

  1. 一个函数被不断的调用
  2. 函数只有简单的几行,且函数中不包含for,while,switch语句

注意:关键字inline必须与函数定义体放在一起才能是函数称为内联,仅仅将inline放在函数声明前不起作用。

例如:
inline void fun(int x,int y);   //这样是不能将fun函数定义为内联函数的
void fun(int a,int b)
{
    return a>b;
}


应该改为
void fun(int x,int y);
inline void fun(int a,int b)
{
    return a>b;
}

内联函数是以代码膨胀为代价的(空间换时间),仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间相比于函数调用的开销大,那么效率的收获会很少。另外每一处内联函数的调用都要复制代码,将是程序的总代码量增大,消耗更多的内存空间。

宏在c语言里极为重要,在C++中就少用的多了。关于宏的第一规则是绝不应该去使用,除非你不得不这样做。

宏是在代码处不加任何验证(无类型检查)的简单替换,而内联函数是将代码直接插入到调用处,而减少了普通函数的调用时的资源消耗。

宏不是函数,只是在预处理阶段将程序中有些关键字替换成宏体