宏是危险的
宏可以充当函数使用,但又不是真正的函数。
宏展开体属于函数体出现时的定义,并不是函数真实调用时的定义。
#define CAL ((x)*(x)*(x))
---use--
int i;
......
int a=CAL(++i);//未定义或者说歧义
使用内联函数或者静态函数替换
inline int cal(int i){
return i*i*i;
}
宏可以充当函数使用,但又不是真正的函数。
宏展开体属于函数体出现时的定义,并不是函数真实调用时的定义。
#define CAL ((x)*(x)*(x))
---use--
int i;
......
int a=CAL(++i);//未定义或者说歧义
使用内联函数或者静态函数替换
inline int cal(int i){
return i*i*i;
}