define和inline的区别
程序员文章站
2024-03-23 13:59:04
...
区别:
1.内联在函数编译时展开,而宏在预编译时展开。
2.编译时,内联函数可以直接被镶嵌到目标代码中,而宏定义只是一个简单的文本替换。
3.内联函数可以完成类型检查、语句是否正确等编译功能,宏定义则不可以。(宏定义不是函数,inline是函数)。
4.宏在定义时要小心处理宏参数,(一般情况是把参数用括弧括起来)。
举例:
define
1、宏定义只是简单的文本替换,所以注意将变量加上括号,例
#include<stdio.h>
#define SQR(x) (x*x)
int main()
{
int a, b = 2;
a = SQR(b + 3);
printf("a=%d\n", a);
return 0;
}
预期结果:(b+3)*(b+3)=25;
实际结果:b+3*b+3=11;
而内联函数要比前者好很多
功能也要全面很多!
最主要的是
内联函数能够进行安全检查(比如参数类型 等)
如果在能够使用两着的情况之下
推荐使用内联
缺点:
内联是以代码膨胀为代价的,
不是所有的函数都适合用 内联 方式
要考虑函数的实际情况
如果函数的逻辑比较复杂(有循环递归之类的),此时则会内联失败。
内联函数一般在10行以下,而且逻辑简单。