C程序输出的原因

时间:2012-08-31 13:32:04

标签: c

#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 个答案:

答案 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));