>a = b * c + i++;
Goでもインクリメントは単独文で、他の式と組み合わせられないから、
MISRA-C 2004、ルール12.13 には違反する

>a[i] = i++;
これも、i = 1 だとして、a[1], a[2]のどちらかわからない。
ルール12.2、1つの副作用完了点内での、部分式の評価順序は未規定

iの読み取りが、1つの副作用完了点内で、
左辺・右辺の2回起こっていて、そのタイミングがわからない。
とにかく、1つの文内で、更新される同じ変数を、2回アクセスしたらダメ

言語の規格書を読んで勉強するのは、素人には絶対無理。
MISRA-Cの日本語訳を書いている集団でさえ、
規格書に詳しい人はいないし、皆欧州の委員会へ、問い合わせて作っている

まず規格書を説明するための、例題や概念が必要。
副作用と副作用完了点、キャストの潜在型・汎整数拡張・平衡化、複合式など

とにかく、バグを避けるには、まぎらわしい書き方をしない。
長い文を書かない。誰も規格について詳しい人はいないから