Adopt C99's support for interleaving variable declarations with non-declarative statements, and refactor the code where relevant to code clarity so that declarations occur at first use. For example, many blocks of code are linear sequences of statements, only some of which assign to newly declared variables, and such code can be more clearly and compactly represented with the aid of interleaved declarations.
This conversion includes moving iteration count variable declarations, e.g.
I started converting code to take advantage of mixed declarations, and came to the conclusion that this is something we're better off doing incrementally as we maintain/refactor code for other primary purposes, for two reasons:
Getting the refactor right requires more than just skimming the code, which increases risk of regressions during a full sweep.
The sheer volume of code that would change is unreasonable.
Incidentally, I finally remembered why this restriction persisted for so long: MSVC++. This restriction no longer exists in at least Visual Studio 2015 (I checked prior to opening this issue), but it was certainly an issue in previous years, and @glandium fixed multiple build regressions before he added -Werror=declaration-after-statement to stop the suffering.