Le code suivant est-il légal selon C99?C99: Puis-je déclarer des variables au début d'un bloc dans un 'for'?
...
for(....) {
int x = 4;
...
}
...
Vous pouvez supposer qu'avant la ligne 3, la variable x n'a jamais été déclarée.
Jusqu'à présent, je n'ai trouvé ce qui suit, mais je ne pense pas que cela suffit:
Un bloc permet un ensemble de déclarations et être regroupées en une seule unité syntaxique. Les initialiseurs d'objets ayant une durée de stockage automatique et les variables de longueur variable sont évalués et les valeurs sont stockées dans les objets (y compris le stockage d'une valeur indéterminée dans des objets sans initialisateur ) heure à laquelle la déclaration est atteinte dans l'ordre d'exécution, comme s'il s'agissait d'une instruction , et dans chaque déclaration dans l'ordre dans lequel les déclarants apparaissent.
À partir de la page 145 de ce PDF.
Ancien x. La portée d'une variable automatique commence là où elle est définie et court jusqu'à la fin du bloc. –
Pour être honnête, l'ombrage des variables automatiques est un peu douteux de toute façon. Les déclarer au début du bloc n'empêche pas quelqu'un d'essayer d'utiliser le x externe, et d'obtenir l'interne plutôt parce qu'ils ont oublié qu'il était là. Si vous pouvez faire confiance à quelqu'un pour faire face à des variables cachées, je pense que vous devez leur faire confiance pour connaître les règles de portée - si vous utilisiez un compilateur C99 tout le temps, vous les connaîtriez assez rapidement, car vous le sauriez que si le x externe n'existait pas du tout, cette boucle C99 ne compilerait pas. –