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

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行以下,而且逻辑简单。