C程序输出的原因

C程序输出的原因,c,C,我检查了这个程序的输出将是9。为什么? 因为一切都正常运转。因为2+7=9大于3+2=5 不过,通常在编写此类宏时,应小心将参数括在替换宏的表达式中的括号中,以避免有人使用优先级低于所用运算符的运算符传递表达式,从而弄乱表达式 所以,通常你会写: #include<stdio.h> #define MAX(a,b) (a>b?a:b); main() { int x; x=MAX(3+2,2+7) printf("%d",x); } …因为9比5大? 我猜你是在问它

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

因为一切都正常运转。

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

不过,通常在编写此类宏时,应小心将参数括在替换宏的表达式中的括号中,以避免有人使用优先级低于所用运算符的运算符传递表达式,从而弄乱表达式

所以,通常你会写:

#include<stdio.h>

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

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

…因为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。因此,宏可以归结为:

#define MAX(a,b) (a>b?a:b); 
然后,当代码运行时,您可以想象宏调用被该代码替换:

if (5 > 9)
  return 5
else
  return 9
显然,我们将返回9,它存储为“x”,然后打印

这有用吗

void main()
{
    int x;
    if (5 > 9)
        x = 5;
    else
        x = 9;
    printf("%d", x);
}
在宏定义中,三元if-espression?:是这样工作的

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

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


如果满足条件,表达式将求值为?后面的第一个值,或者求值为:if条件未满足之后的第二个值

到目前为止,您希望得到什么?感谢您迄今为止所做的工作?请为自己准备好学习C的参考资料书籍、网站、常见问题解答。您指定主要内容的方式表明您没有任何像样的东西。谢谢。我想知道它是如何工作的。这个宏定义是否替换了调用它的位置?是的,如果我理解你的要求。。。宏类似于函数,因为它允许您在过程之外定义一些功能,以便在其范围内的任何位置轻松调用它。我将更新我的示例以向您展示。
#define MAX(a,b) (a>b?a:b);