Я использую Coverity Prevent в проекте для поиска ошибок.
Он сообщает об ошибке для этого выражения (Имена переменных, конечно, изменены):
x=
(a>= b) ?
++x: 0;
Сообщение:
EVALUATION_ORDER дефект: In "
x = (a> = б)? ++ x: 0;
","x
"записано в"x
"(назначение LHS) и записано в"(a> = b) ? ++ x: 0;
"но порядок, в котором происходят побочные эффекты, не определен, поскольку нет промежуточной точки последовательности. КОНЕЦ СООБЩЕНИЯ
Хотя я могу понять, что" " x = x ++
"не определено, это немного сложнее для меня. Это ложное срабатывание или нет?
Оператор x = ++x;
записывает в переменную x
дважды, прежде чем попасть в точку последовательности, поэтому поведение не определено.