C语言使用宏定义取最大值
使用宏定义取两个值中最大值是一个很简单的题目,随手写下:
1 |
这样写可以应付大多数的情况了,但在某些情况下还是会出现问题,比如说:
1 |
|
输出的结果是:
1 | max=6,i=5,j=7 |
这和我们想象的不太一样,j的值应该是6。我们把MAX(i++,j++)
带入看下
1 | printf("max=%d,i=%d,j=%d",((i++)>(j++)?(i++):(j++)),i,j); |
我们可以看到,j++
这条命令被执行了两次,导致j的值为7,为了解决这个问题,我们修改下MAX。
1 |
用typeof
获取x,y的数据类型,用_x和_y暂时保存x,y的值。避免了上面出现的问题。又或者是:
1 |
抛出Warning解决类型不同的问题(不是很理解这句话(void)(&_x==&_y);
)。
比较相同类型的值时,也可以这样写(虽然我感觉没有上面的好用):
1 |
大概就是这样,关于宏定义取最大值的问题,欢迎与我讨论