static inline和define都是一种宏定义语法。define一般用来预编译常量,static inline一般用来预编译函数。
- 在定义函数时,define会引起语义上的歧义
#define MULTI(x) (x*x)
NSLog(@"MULTI(10):%d", MULTI(10));
NSLog(@"MULTI(10+10):%d", MULTI(10+10));
打印结果为:
MULTI(10):100
MULTI(10+10):120
很显然,在处理MULTI(10+10)时,一般理解为:(10+10)*(10+10)=400。但是define只是将x简单替换,所以实际为:10+10*10+10=120。
static inline int MULTI2(int x) {
return x*x;
};
NSLog(@"MULTI2(10):%d", MULTI2(10));
NSLog(@"MULTI2(10+10):%d", MULTI2(10+10));
打印结果为:
MULTI2(10):100
MULTI2(10+10):400
当使用static inline预编译时,不会造成语义上的歧义,而且效率更高。






网友评论