条件表达式

标签 c

所以我正在准备考试,我不明白如何解决这个条件表达式。我知道如果表达式 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/

相关文章:

c - C编译器的四个阶段

c - 使用 Zookeeper C 客户端的进程在 SIGTERM 上断开连接

c - Windows 互斥体 WAIT_OBJECT_0 和 WAIT_ABANDONED

c - 幂函数 K&R

c - 用于 getchar 的汇编内联 C,不带 echo

c - fopen/fclose 上的段错误

对使用 libcurl 下载的文件所做的更改不会生效

c - 解释为什么输出10会出现在c程序中

c - 查找并打印带有空格或制表符分隔符的字符串的最后一个单词

c - C 中的随机移动 tic tac toe