老生常谈的话题,但是不得不经常敲敲警钟.不管是新入行的应届生,还是干了多年的老手.我都会看到他们犯这个小错误(当然老手犯错的概率非常小).也许犯这种错误是程序员经历积累中不可避免的一堂课.
比如:
#define CUBE(I) (I * I * I)
int a = 81 / CUBE(2 + 1);
这种情况由于运算优先级的顺序,后面一句代码展开为:
int a = 81 / (2 + 1 * 2 + 1 * 2 + 1); /* evaluates to 11 */
这种情况当然不是程序员的本意.
如果宏这样定义:
#define CUBE(I) ( (I) * (I) * (I) )
那么展开的结果:
int a = 81 / ((2 + 1) * (2 + 1) * (2 + 1));
符合预期.
只有注册用户才能在此添加评论。 如果您已经注册,请登录。 如果您还没有注册,请注册并登录。