我有以下形式的表达:-

while (count)
{
...
...

    index = ((count == 20)? 0 : index++);
...
...
}

现在,三元运算符是C中的序列点,但我相信序列点在测试部分结束。

这种理解是正确的,因此这种说法会导致不确定的行为吗?

最佳答案

正确的。条件评估后有一个序列点,但下一个序列点是分号终止该语句。因此,无论何时count != 20,您都有未定义的行为

index = index++;

因为对index进行了两次修改,而没有插入顺序点。

09-25 17:58