Personne ne sera sans doute d'accord, mais :
1/ je préfère le premier (une ligne inutile de moins)
2/ en principe le standard C (ou en tous cas les vieilles versions, mais j'ai continué par habitude) ne te permet de déclarer les variables qu'en début de bloc (ie juste après une accolade ouvrante). Même si ça n'est peut-être pas obligatoire avec tigcc, ça reste plus lisible à mon avis que d'avoir des déclarations en plein milieu du code ^^. (Note que tu peux ouvrir un bloc à n'importe quel moment, pas besoin que ce soit dans une boucle, un if ou autre, et l'utilité est justement d'introduire des variables locales à ce bloc).
Déclarer les variables avec le plus petit scope possible permet normalement de repérer plus d'erreurs (il va râler si tu utilises la variable à l'extérieur du bloc, par exemple parce que tu t'es trompé de nom de variable...)
Pour ta question technique : ben tu te réponds à toi-même non ?

il n'y a pas spécialement de bonne raison de préférer les variables globales. (Dans foblub je fous des variables globales dans des registres, mais c'est un peu particulier, c'est parce que c'est une machine virtuelle et que ces variables sont utilisées absolument tout le temps. Edit : accessoirement je fais aussi comme a dit Pen^2, j'utilise en fait une grosse structure dont l'adresse est dans un registre ^^. Mais je fais ça à coups de #define

).