À l'endroit où je travaille, il existe des directives explicites pour la mise en place de déclarations de variables. Selon cela, il est tenu de les mettre au niveau mondial et/ou au début des fonctions, et non dans des blocs intérieurs (tels que A pour boucle). Depuis qu'ils ont été spécifiés par des personnes plus expérimentées que moi, je suis sûr qu'il doit y avoir une bonne raison pour cela, mais je ne peux pas comprendre ce que cela pourrait être. Il serait agréable de savoir s'il y a des avantages de l'heure/du temps d'exécution compilé pour les avoir déclarées à une plus grande portée.
Je vois deux avantages principaux:
Tout compilateur valant son sel optimisera la portée des variables de toute façon, c'est donc purement une préoccupation de formatage.
Pour mes deux cents, je préférerais toujours la déclaration la plus interne de la variable de transporter l'intention de la portée du compilateur. Si vous souhaitez avoir une variable accessible uniquement dans une boucle, vous pouvez saisir une référence ultérieure au moment de la compilation lorsque vous déclarez la variable dans la boucle.
Le seul avantage que j'ai trouvé jusqu'à présent est la simplicité de code. Vous savez où rechercher des déclarations variables et que tout le monde de l'équipe adopte le même style de codage. Ces choses facilitent la maintenance du code, mais je ne suis pas sûr d'écrire un meilleur code plus facile. Je ne veux pas dire que vous écrivez le code pire uniquement qu'il est parfois difficile d'écrire du code comme bon. Néanmoins, si l'équipe de développement est grande ou que ses membres changent fréquemment à l'aide des normes de code sont utiles.
Chaque langue pourrait différer dans la préférence du style et de la pratique. Voici de JSF-AV-RESTRES , que STROSTRUP pointe comme étant les normes de codage qu'il préfère.
AV Règle 136
[.____]Declarations should be at the smallest feasible scope
La justification pour cela est décrite comme
This rule attempts to minimize the number of live variables that must be simultaneously considered. Furthermore, variable declarations should be postponed until enough information is available for full initialization
Si vous êtes en C++, déclarez une variable lorsque vous en avez besoin d'eux est préférable.
Je ne sais pas si vous pouvez appeler cela une meilleure pratique. Lorsque je confectionne des directives pour un nouveau projet C, j'affirme toujours qu'il est préférable de déclarer les variables proches de l'endroit où elles sont utilisées. Pour deux raisons, il est plus facile de refroidir le code plus tard (c'est-à-dire lors de l'extraction d'une méthode). Cela aide également le compilateur à faire une meilleure optimisation.
Je ne suis pas seul avec cette opinion. Voici une question qui s'attaque au même problème: https://softwareengineering.stackexchange.com/questions/56585/where-do-you-deClare-top-of-a-method-or-Que -Vous avez besoin - eux la réponse ici est de les déclarer où vous les utilisez. La même pratique est décrite dans le livre 'Clean Code' de Robert C. Martin.
Toutefois, si vous utilisez une norme C plus ancienne (C-89), vous devez définir des variables locales en haut de la fonction. Donc, peut-être que la ligne directrice est un reste de l'époque où C-89 a été utilisé? Il est probablement préférable de demander à la personne qui a écrit les lignes directrices pourquoi la règle est toujours là.
Si la déclaration est au sein d'une clause Si si elle est rarement (si jamais) est exercée, mais nécessite beaucoup de mémoire, votre empreinte mémoire est plus petite (la plupart du temps) que si vous allouez tout au début de la fonction.
S'il est dans une boucle, vous devez réaffecter la mémoire à plusieurs reprises, cela peut être coûteux en termes de performance.
Il y a des raisons de faire des choses à la fois.
L'ancien norme C de 1989 permet uniquement aux déclarations variables au début d'un bloc.
Seules les déclarations de C99 sont autorisées n'importe où. Peut-être que votre place n'a pas encore apporté le passage à C99.
On dirait que ceux qui ont fait cette décision sont à une époque lors de la mise en place de déclarations au sommet étaient la norme et ont choisi de ne pas changer de préférence pour déclarer plus près de l'endroit où elle est utilisée.
Je ne suis pas sûr de savoir comment est hurlant ce niveau de cohérence. Certains IDE font probablement la recherche de choses plus faciles que d'autres. Pour les variables globales, cela a du sens, mais si votre fonction est si longue, il est difficile de trouver des déclarations variables difficiles, vous avez de plus gros problèmes.