首页 > 解决方案 > C中的三元运算

问题描述

我有一个关于 C 中三元运算的技术问题。假设我们有以下程序:

#include <stdio.h>
#define M(a, b) (b? (a / b) : (a + b))
int main()
{
   int x = 10, y = 3;
   printf("%d\n" , M(x + y , x - y));
}

在宏观上,问题b的含义是什么?另外,我知道最终的答案是 7,但是 7 是怎么回事?

标签: cconditional-operatoransi

解决方案


不是“问题b”,而是三元运算符的语法

expr ? true_expr : false_expr

在你的情况下,宏替换后你的代码真的变成了

int main()
{
   int x = 10, y = 3;
   printf("%d\n" , (x - y? (x + y / x - y) : (x + y + x - y));
}

因为x - y是 7,所以这成为真的,因为它不是0true_expr在您的情况下执行下一个(x + y / x - y)。替换值,这将计算为10 + 3 / 10 - 3=> 10 + 0 - 3,它减少为7


推荐阅读