>>840
H&Sを読み解くに……宣言子が終わった時点で、その識別子が有効になる
その後、初期化子が続くが、
初期化子の中でたった今宣言した宣言子を使うことは許される

つまり
int i =i+1;
  ^
この時点で内側のブロックの変数 i が有効になり、
外側の i はシャドウされて見えなくなる
その後の初期化子の i は内側の i だから、不定値に1を足した値が i となる