Хороший вопрос. Одна вещь, которую вы подчеркнули, это «точки последовательности», чтобы процитировать с этого сайта
почему нельзя полагаться на такие выражения, как:
a [i] = i ++;
поскольку для операторов присваивания, приращения или индекса не указана точка последовательности, вы не знаете, когда произойдет влияние приращения на i.
И, кроме того, вышеприведенное выражение аналогично тому же, поэтому поведение равно undefined , поскольку для инструментов для отслеживания этого значения - ноль, конечно, есть splint , чтобы назвать одно в качестве примера, но это стандарт C, так что, возможно, в инструменте есть скрытая опция, о которой я еще не слышал, возможно, Gimpel PC Lint или Riverblade Visual Вам может помочь lint, хотя я признаю, что в нем ничего не говорится о отслеживании неопределенного поведения в этом отношении.
Между прочим, версия 4.3.3 компилятора GCC имеет эту опцию -Wsequence-point
как часть предупреждения об ошибках .. это на моем Slackware 13.0 box ...
Это просто показывает, что код может выглядеть невооруженным глазом и будет прекрасно компилироваться, но позже может вызвать головную боль, лучший способ сделать это - иметь обзор кода, который может обнаружить вещи, которые компилятор может не выбрать читай, это лучшее оружие выбора!