C 三元运算符分支评估?
C ternary operator branches evaluation?
我一直假设 C
中的三元运算符没有计算未通过测试的分支。为什么在这种情况下呢? a
小于 b
,因此只应将 c
分配给 1
,d
应保留 2
。感谢您的提示和建议。我已经用 gcc-9 和 clang 编译了。
#include <stdio.h>
int main() {
int a = 42;
int b = 99;
int c = 0;
int d = 2;
// Both branches are evaluated?
a < b ? c, c = 1 : d, d = 1;
printf("c %d, d %d.\n", c, d);
// Prints c 1, d 1.
}
逗号运算符的优先级低于条件运算符,因此您的表达式等同于:
(a < b ? c, c = 1 : d), d = 1;
我一直假设 C
中的三元运算符没有计算未通过测试的分支。为什么在这种情况下呢? a
小于 b
,因此只应将 c
分配给 1
,d
应保留 2
。感谢您的提示和建议。我已经用 gcc-9 和 clang 编译了。
#include <stdio.h>
int main() {
int a = 42;
int b = 99;
int c = 0;
int d = 2;
// Both branches are evaluated?
a < b ? c, c = 1 : d, d = 1;
printf("c %d, d %d.\n", c, d);
// Prints c 1, d 1.
}
逗号运算符的优先级低于条件运算符,因此您的表达式等同于:
(a < b ? c, c = 1 : d), d = 1;