star-style

Writing conventions for co-authors
Log | Files | Refs | README | LICENSE

commit ebb30c1cd2765d5744bf0e0431d8d8bb854a80f0
parent 5c42f0f4a7ed88904bcc9a1457ca21842cbfd70a
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 13 Jul 2026 16:49:37 +0200

Rédige la section sur les variables

Diffstat:
Mdoc/fr/star-c.7 | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 70 insertions(+), 0 deletions(-)

diff --git a/doc/fr/star-c.7 b/doc/fr/star-c.7 @@ -1133,6 +1133,76 @@ fonction ; son occupation mémoire étant a priori plus important qu'une donnée simple. .\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" .Sh LES VARIABLES +Limiter le nombre de variables par bloc entre 5 et 10. +Un nombre de variables trop important peut être le signe d'un manque de +structure auquel un découpage en sous-fonction(s) pourrait remédier +.Pq section Sx LES FONCTIONS . +.Pp +Initialiser les variables dès leur définition avec sinon une valeur +valide, au moins une valeur par défaut. +Et d'ainsi éviter l'utilisation de variables non initialisées. +D'apparence peu critique pour les variables de type primitif, cette +initialisation l'est bien plus pour les variables structurées, dont la +liste des membres peut évoluer, sans que le code appelant n'est +forcément à s'en soucier dès lors que ses membres sont correctement +initialisés. +Si elle existe, utiliser la constante proposée avec la structure pour +initialiser une variable de ce type. +.Pq voir section Sx LES CONSTANTES . +En son absence n'initialiser que le premier membre de la variable ; le +language C assure alors que les autres membres seront initialisés à 0. +De même pour un tableau alloué sur la pile, initialiser son premier +élément suffit à garantir que le reste du tableau sera initialisé à +zero : +.Bd -literal -offset Ds +struct foo foo = FOO_DEFAULT; +struct bar bar = {0}; +int qux[10] = {0}; +int i = 0; +.Ed +.Pp +Au sein d'une même fonction, définir les variables au plus proche de +leur utilisation de sorte à ce qu'un contexte resserré participe à les +caractériser. +Par exemple, une variable +.Va i +utilisée dans un bloc comme variable temporaire, et comme indice +de boucle dans un autre gagnera en expressivité et en +robustesse à être définie localement à chaque bloc ; +les deux variables étant, par construction, non seulement séparées mais +aussi sans effet de bord de l'une sur l'autre : +.Bd -literal -offset Ds +if(foo) { + const int i = bar(); + if (i > max_i) max_val = i; + if (i < min_i) min_val = i; +} else { + int i = 0; + for(i = 0; i < N; ++i) qux(i); +} +.Ed +.Pp +Dans un même bloc, regrouper les définitions des variables dès lors +qu'elles sont liés sémantiquements : +.Bd -literal -offset Ds +/* Tableau à traiter */ +double* liste = NULL; +int longueur_liste = 0; +.Ed +.Pp +Pour chaque groupe de variable, les définir par ordre décroissant de +leur occupation mémoire a priori. +Définir par exemple les variables structurées avant les variables de +données simples. +Cette convention s'inspire des contraintes des compilateurs C +qui, pour garantir l'alignement des données eu égard à leur type, +peuvent ajouter des octets de remplissage, augmentant ce faisant +l'espace mémoire occupée par la fonction. +Un sourcoût marginal qui néanmoins peut s'avérer significatif pour +des fonctions appeler récursivement. +Ordonner les variables par ordre décroissant de leur taille mémoire +tend à limiter le nombre d'octets de remplissage nécessaire, et donc le +coût mémoire associé. .\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" .Sh LES CONSTANTES Utiliser une énumération si les constantes à définir sont liées