0
#include<stdio.h>

#define MAX(a,b) (a>b?a:b);

main()
{
 int x;
 x=MAX(3+2,2+7)
 printf("%d",x);
}

我检查了这个程序的输出会来9。为什么?

4

4 回答 4

10

因为一切正常。

于 2012-08-31T13:32:53.023 回答
2

...因为 9 大于 5?我猜你真的在问它是如何工作的。(可能要查找三元运算)所以...

#define MAX(a,b) (a>b?a:b); 

是一个宏,名字是MAX,它有两个值“a”和“b”。它的工作原理是如果 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,它存储为 'x' 然后打印。

这有帮助吗?

于 2012-08-31T13:36:39.623 回答
2
#define MAX(a,b) (a>b?a:b);

在宏定义中,三元 if espression?:以这种方式工作

健康)状况 ?[条件为真时的值]:[条件不满足时的值]

条件是 C 中有效的任何表达式(因此 0 为假,其他一切为真)

如果满足条件,则表达式评估为第一个值(紧跟在 之后的那个?),或者如果不满足条件,则评估为第二个值(紧跟在 之后的那个:

于 2012-08-31T13:38:15.143 回答
0

因为 2+7=9 大于 3+2=5。

尽管如此,通常在编写这种宏时,您应该小心地将参数括在替换宏的表达式中的括号中,以避免有人传递带有比您正在使用的运算符优先级低的运算符的表达式的风险,从而弄乱你的表情。

所以,通常你会写:

#define MAX(a,b) ((a)>(b)?(a):(b));
于 2012-08-31T13:34:35.397 回答