所以我正在准备考试,我不明白如何解决这个条件表达式。我知道如果表达式 1 为真,则执行表达式 2,如果为假,则执行表达式 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);
最佳答案
程序的行为未定义。
(X = B != C)
分组为 (X = (B != C))
并且由于 B
为 1不等于C
。
一个排序点被传递(此处不相关,但您可以确信当评估三元分支之一时X
为1),并且“true "评估三元条件的分支。但表达式 (A = (~C) - A--)
的行为是未定义。这使整个程序进入未定义状态,包括一些已经运行的语句,这有些奇怪。
关于条件表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50947400/