#include<stdio.h>
#define MAX(a,b) (a>b?a:b);
main()
{
int x;
x=MAX(3+2,2+7)
printf("%d",x);
}
我检查了这个程序的输出会来9.为什么?
答案 0 :(得分:10)
因为一切正常。
答案 1 :(得分:2)
...因为9大于5? 我猜你真的在问它是如何运作的。 (可能想查找三元操作)所以......
#define MAX(a,b) (a>b?a:b);
是宏,名称是MAX,它需要两个值&#34; a&#34;和&#34; b&#34;。工作原理是如果a大于b,则返回a,否则返回b。
在这种情况下,3 + 2 = 5 = a和2 + 7 = 9 = b。所以宏观归结为:
if (5 > 9)
return 5
else
return 9
然后,当您的代码运行时,您可以将宏调用视为替换为该代码:
void main()
{
int x;
if (5 > 9)
x = 5;
else
x = 9;
printf("%d", x);
}
显然,我们将返回9,其存储为&#39; x&#39;然后打印。
这有帮助吗?
答案 2 :(得分:2)
#define MAX(a,b) (a>b?a:b);
在宏定义中,三元if espression ?:
以这种方式工作
条件? [条件为真时的值]:[不满足条件时的值]
条件是在C中有效的任何表达式(因此0为假,其他一切都为真)
如果满足条件,表达式将变为第一个值(?
之后的那个)或第二个值(:
之后的那个)如果不满足条件
答案 3 :(得分:0)
因为2 + 7 = 9大于3 + 2 = 5。
但是,通常在编写这种宏时,您应该小心地将参数括在替换宏的表达式的括号中,以避免某人使用优先级低于您的运算符传递表达式的风险正在使用,从而搞砸了你的表达。
所以,通常你会写:
#define MAX(a,b) ((a)>(b)?(a):(b));