码迷,mamicode.com
首页 > 其他好文 > 详细

宏-在复杂调用的情况下不可预期的行为

时间:2015-02-11 10:55:19      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

#define min(a,b) ((a) < (b) ? (a) : (b))

在复杂调用的情况下,它的行为是不可预期的,这是因为它的两个参数值都被计算两次. 一次是在a 和b 的测试中另一次是在宏的返回值被计算期间.


#include <iostream>
#define min(a,b) ((a) < (b) ? (a) : (b))
const int size = 10;
int ia[size];
int main() {
int elem_cnt = 0;
int *p = &ia[0];
// 计数数组元素的个数
while ( min(p++,&ia[size]) != &ia[size] )

{
++elem_cnt;
cout << "elem_cnt : " << elem_cnt
<< "\texpecting: " << size << endl;
return 0;
}  

输出结果 elem_cnt : 5 expecting: 10


宏-在复杂调用的情况下不可预期的行为

标签:

原文地址:http://blog.csdn.net/lightupheaven/article/details/43730689

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!