您的位置:首页 > 其它

条款02:尽量以const, enum, inline 替换#define

2015-12-20 19:11 274 查看
带参数的宏: a 和 b 较大值调用f

#define CALL_WITH_MAX(a, b) f( (a) > (b) ? (a) : (b) )

当你写出这种宏时,必须为宏中的所有实参加上小括号,否则引起不必要的麻烦

看下面不堪思议的事情

int a = 5;

int b = 0;

CALL_WITH_MAX(++a, b) ;
//a被累加了两次

#define CALL_WITH_MAX(++a, b) f( (++a) > (b) ? (++a) : (b) )
//a = 7

CALL_WITH_MAX(++a, b +10) ;
//a被累加了一次

f调用之前 , a的递增次数取决于"它被拿来和谁比较"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: