奔放な変数宣言よりスコープの先頭で変数が宣言されていた方がよいと思うのですが、しかし多くの場合、変数宣言の構文自体がないか、スコープの先頭に記述することを強制する文法になっていません(C89では変数宣言がスコープの先頭に制限されていますが、C99以降ではその限りではありません。また、int x; がコードのどこにでも書けそうな文法になっていることは変わりありません)。 ブロック構文がある言語では、ブロックを都度に開き、その中で使われる変数を宣言することで変数の寿命を明示できるため、個人で書く分にはただブロックを書けばよい話ではあるのですが(ただしJavaScriptでvarによる宣言をする場合、関数スコープに対して変数が定義されるのでその限りではないです)、もっと強制力のある方法があってよかった気がしています。 C89からC99への仕様緩和のいきさつは知らないのですが、何か深い考えのもとで