条件表达式

时间:2018-06-20 11:41:13

标签: c

所以我正在为考试做准备,但我不知道如何解决这个条件表达式。我知道如果表达式1为真,则执行表达式2,如果表达式为false,则执行表达式3。有人可以帮助我理解我在第一个表达式中需要执行的操作吗?

int A = -1, B = -2, C = -3;
int X = 1;
(X = B != C) ? (A = (~C) - A--) : (++C + (~A));
printf(" A = %d  B = %d  C = %d  X = %d\n", A, B, C, X);

1 个答案:

答案 0 :(得分:3)

程序的行为是不确定的。

(X = B != C)被分组为(X = (B != C)),并且由于B不等于C而为1。

一个排序点被传递了(此处无关紧要,但是当确定三元分支之一时,您可以确信X为1),并且三元条件被评估。但是表达式(A = (~C) - A--)的行为是 undefined 。这使整个程序处于不确定状态,包括有些奇怪的是,已经运行过的所有语句。