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:
| M | doc/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