dede网站收录,手机网站绑定,采购需求网站建设,企业培训内容有哪些内联函数是一种特殊的函数#xff0c;具有普通函数的特征#xff08;参数检查#xff0c;返回类型等#xff09; 内联函数是对编译器的一种请求#xff0c;因此编译器可能拒绝这种请求 内联函数由 编译器处理#xff0c;直接将编译后的函数体插入调用的地方 宏代码片段…内联函数是一种特殊的函数具有普通函数的特征参数检查返回类型等 内联函数是对编译器的一种请求因此编译器可能拒绝这种请求 内联函数由 编译器处理直接将编译后的函数体插入调用的地方 宏代码片段 由预处理器处理 进行简单的文本替换没有任何编译过程 注内联函数声明时inline关键字必须和函数定义结合在一起否则编译器会直接忽略内联请求。
C中内联编译的限制 不能存在任何形式的循环语句 不能存在过多的条件判断语句 函数体不能过于庞大 不能对函数进行取址操作 函数内联声明必须在调用语句之前
编译器对于内联函数的限制并不是绝对的内联函数相对于普通函数的优势只是省去了函数调用时压栈跳转和返回的开销。
因此当函数体的执行开销远大于压栈跳转和返回所用的开销时那么内联将无意义
#include stdio.h#define MAX(a, b) f((a) (b) ? (a) : (b)) void f (int max)
{printf (max %d\n, max);
}// 内联函数代替宏函数
// 在普通函数前加 关键字 inline 将函数变成内联函数
// inline 必须要和函数定义放一起如果和函数声明放一起会被忽略
// define 是预处理器处理的 inline 是编译器处理的
// define 没有函数参数检测返回检测作用域检测inline 工作方式像一个函数
// 所以会有参数类型检测等
// inline是向请求在调用该函数的时候进行函数体的替换编译器可能拒绝内联请求
// 如果内联成功编译完以后代码是没有这一段函数的// 内联函数函数体不能过长最好不要超过 5 行
// 不能有循环语句复杂的 if 语句
// 不能对内联函数进行取地址操作
inline int max(int a, int b)
{return (ab ? a : b);
}int main7_2()
{int a 10;int b 20;f(10);f (max(a, b));printf (b %d\n, b);return 0;
}int main7_1()
{int a 10;int b 20;MAX(a, b); // f((a) (b) ? (a) : (b))printf (b %d\n, b);return 0;
}