#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
,不论你在什么时候开始,重要的是开始之後就不要停止