时间:2022-12-25 15:23:42 | 栏目:C代码 | 点击:次
C 语言中有宏函数的概念。宏函数的特点是内嵌到调用代码中去,避免了函数调用的开销。但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语意差错。
C++提供了 inline 关键字,实现了真正的内嵌。
宏函数 VS inline函数
#include <iostream> #include <string.h> using namespace std; //优点:内嵌代码,辟免压栈与出栈的开销 //缺点: 代码替换,易使生成代码体积变大,易产生逻辑错误,无类型检查 #define SQR(x) ((x)*(x)) //优点:高度抽象,避免重复开发,类型检查 //缺点: 压栈与出栈,带来开销 inline int sqr(int x) { return (x)*(x); } int main() { int i=0; while(i<5) { printf("%d\n",SQR(i++)); printf("%d\n",i); printf("%d\n",sqr(i++)); printf("%d\n",i); } return 0; }
引入内联函数的目的是为了解决程序中函数调用的效率问题,这么说吧,程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行时候才被替代。这其实就是个空间代价换时间的i节省。所以内联函数一般都是1-5行的小函数。在使用内联函数时要留神:
1.在内联函数内不允许使用循环语句和开关语句;
2.内联函数的定义必须出现在内联函数第一次调用之前;
3.类结构中所在的类说明内部定义的函数是内联函数;