次のコードはC99に従って合法ですか?
...
for(....) {
int x = 4;
...
}
...
3行目より前に、変数xが宣言されていなかったと想定できます。
今まで私は以下を見つけただけですが、これで十分だとは思いません:
ブロックを使用すると、一連の宣言とステートメントを1つの構文単位にグループ化できます。自動保存期間を持つオブジェクトの初期化子、およびブロックスコープを持つ通常の識別子の可変長配列宣言子が評価され、宣言が行われるたびに値がオブジェクトに保存されます(初期化子なしのオブジェクトに不確定な値を格納することを含む)それがステートメントであるかのように実行の順序で、そして宣言者が現れる順序で各宣言内に到達しました。
そのPDFの145ページから。