作者:容容1217_778 | 来源:互联网 | 2022-12-06 10:04
使用define preprocessor指令为什么以下程序输出4而不是3?
#include
#define MAX(A,B)((A)>(B)) ? A : B
int max_t(int a, int b)
{
return ((a)>(b)) ? a : b;
}
int main()
{
int i=1;
int j=2;
int val = MAX(++i, ++j); // this outputs 4 but why?
//int val = max_t(++i, ++j);
printf("%d\n", val);
return 0;
}
Osiris..
7
宏只是代币的替代品
MAX(++i, ++j);
扩展到
((++i) > (++j)) ? ++i : ++j;
如您所见,在这种情况下,参数被评估(并递增)两次,因此输出为4
.
1> Osiris..:
宏只是代币的替代品
MAX(++i, ++j);
扩展到
((++i) > (++j)) ? ++i : ++j;
如您所见,在这种情况下,参数被评估(并递增)两次,因此输出为4
.