以下代码为什么不输出最多三个数字?
#include<stdio.h>
#define max(a,b) (a>b)?(a):(b)
#define min(a,b) (b>a)?(a):(b)
int main()
{
printf("%d",max(2,max(1,4)));
return 0;
}
结果是:
Output: 2
无法在宏调用内调用宏吗?
答案 0 :(得分:3)
无法在宏调用内调用宏吗?
可以嵌套宏调用
要获得所需的功能,请将()
放在每个参数周围,并将()
放在整个表达式周围。
// #define max(a,b) (a>b)?(a):(b)
#define max(a,b) (((a)>(b)) ? (a) : (b))
在没有明智使用()
的情况下,当参数在b
的{{1}}的外部调用中像max(a,b)
一样平凡时,代码可能无法按预期进行评估< / p>
答案 1 :(得分:1)
int loopCounter = 1
扩展为max(2, max(1,4))
注意 (2> (1>4)?(1):(4) )?(2):( (1>4)?(1):(4) )
是2> (1>4)?
,这是正确的。所以2是值。
要解决此问题,请添加一些括号:)
2 > false == 2 > 0