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

#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

,不论你在什么时候开始,重要的是开始之後就不要停止

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

相关文章:

你感兴趣的文章:

标签云: