【发布时间】:2021-10-25 11:34:16
【问题描述】:
我有一个关于 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呢?
【问题讨论】:
-
b ?表示如果b为真,即如果b != 0。这种情况下做除法,否则做加法 -
你需要括号:
(b)?,这相当于(10-3)?,也就是你对7?...的想法。也就是说它是一个条件表达式,对于整数,它评估值的“真实性”,也就是非零 -
这是否回答了您的问题:stackoverflow.com/questions/463155/… ?
-
还要注意
M(X, Y)在实际编译之前被文本替换:所以编译器会看到:(x -y ? (x + y / x - y) : (x + y + x - y))
标签: c conditional-operator ansi