公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

以代码例子说明功能的安全编程实践:宏参数必须使用括号包起来

以代码例子说明功能的安全编程实践:宏参数必须使用括号包起来

User12775
Level 5
Level 5
First solution authored First like received

老生常谈的话题,但是不得不经常敲敲警钟.不管是新入行的应届生,还是干了多年的老手.我都会看到他们犯这个小错误(当然老手犯错的概率非常小).也许犯这种错误是程序员经历积累中不可避免的一堂课.

比如:


#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));


符合预期.


0 点赞
1452 次查看
6 评论