在说inline函数和static函数的区别前,先说说 static函数和普通函数的区别。
static函数和普通函数的区别:函数符号不同。
普通函数是global符号,static函数生成的是local 符号。除此区别外,二者并无差别,都有开栈、清栈过程。
一、inline函数和static函数的区别:
区别1、inline函数无开栈、清栈开销,而static函数有;
区别2、inline函数是在编译阶段代码展开导致函数只在本文件可见,而static 符号的属性是local,在本文件可见;
二、inline 和宏的区别
区别:inline函数在编译时期处理,有语法、语义、词法分析,即有类型检查和安全检查,
而宏是在与编译时期处理,只进行值替换,没有类型检查和安全检查,所以不安全;
三、内联的注意事项
1、内联函数只在realse 版本中生效;
2、将内联函数写在头文件中;
3、inline 只是给编译器一个建议,而最终会不会被处理为内联函数由编译器决定;
4、inline 加在声明函数前是无效的,因为inline是基于实现的关键字,而不是基于声明的;
四、内联的缺点及建议
缺点:以代码膨胀为代价,是一个典型的以空间换时间的思想。
建议:若开栈的开销 > 执行的开销,则设置为inline函数,这样可以提高效率;反之,不建议使用inline;
若开栈的开销远小于执行的开销,则一定不要设置为内联函数。