star-style

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

commit 8527252cce3777a07d260d1f1a48ff67c688da1f
parent aea82a6c9e36c09443976d6674a8c208de8afdcd
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed,  2 Sep 2026 11:15:10 +0200

Rédige la section sur la sortie d'une fonction

Il manque à ce stard une description du type res_T utilisé pour notifier
l'état de sortie de la fonction. Ainsi qu'une différenciation entre la
gestion des erreurs, décrite dans le présente validation, et celle de
bogues, traités par assertion.

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

diff --git a/doc/fr/star-c.7 b/doc/fr/star-c.7 @@ -15,7 +15,7 @@ .\" Vous devez avoir reçu une copie de la GNU General Public License en .\" même temps que Star-Style ; si ce n'est pas le cas, consultez .\" <http://www.gnu.org/licenses>. -.Dd July 13, 2026 +.Dd Septembre 2, 2026 .Dt STAR-C 7 .Os .\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" @@ -1530,7 +1530,7 @@ memset(foo, 0, sizeof(*foo)); Vérifier chaque allocation en testant que l'adresse retournée n'est pas .Ql NULL . Traiter ce cas comme une erreur et non un bogue -.Pq section Sx LA GESTION DES ERREURS Ns +.Pq section Sx CENTRALISER LA SORTIE D'UNE FONCTION Ns  : .Bd -literal -offset Ds foo = mem_calloc(1, sizeof(*foo); @@ -1618,7 +1618,74 @@ avec l'allocateur par défaut définit par la bibliothèque .Ql RSys . .\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -.Sh LA GESTION DES ERREURS +.Sh CENTRALISER LA SORTIE D'UNE FONCTION +Utiliser la directive +.Ql goto +pour centraliser les traitements à effectuer en sortie de fonction, tels +les affectations de variables de sorties, les libérations de variables +locales temporaires, ou le renvoie d'une valeur en retour de la fonction. +Regrouper ces traitements en fin de fonction sous le label +.Ql exit +dont la dernière instruction est la valeur retournée par la fonction. +.Pp +De même, centraliser la gestion des erreurs détectées pendant +l'exécutation de la fonction sous un label +.Ql error , +qui vise à revenir à l'état du programme avant l'appel de la fonction, +et à préparer son retour compte tenu de l'erreur. +Ses traitements recouvrent notamment la libération de +l'espace mémorie alloué à destination de l'appelant, la restauration des +données en mise à jour modifiées par la fonction avant la détection de +l'erreur, ou la définition de valeurs à destination des variables en +sortie en conséquence de l'erreur détectée. +.Pp +Placer le label +.Ql error +après le label +.Ql exit . +Terminer la gestion des erreurs par la directive +.Ql goto exit , +de sorte à effectuer les traitements en sortie, +.Em indépendants +de la présence ou non d'une erreur d'exécution, et donc à appliquer en +toute circonstance. +En structurant les labels de la sorte, les traitements en sortie +.Pq label Ql exit +sont ainsi exécutés soit automatiquement au fil du bon déroulé de la +fonction, sans que l'auteur(e) n'est nécessairement à le préciser. +Soit après la détection d'une erreur dont la gestion explicite via la +directive +.Ql goto error +précède la sortie de la fonction et ses traitements associés ; auxquels +renvoit finalement la gestion des erreurs centralisée sous le label +.Ql error . +.Bd -literal -offset Ds +static res_T +foo(const int bar, int** out_list) +{ + int* list = NULL; + res_T res = RES_OK; + + if (out == NULL) { + res = RES_BAD_ARG; + goto error; + } + + if ((list = mem_calloc(42, sizeof(*list)) == NULL) { + res = RES_MEM_ERR; + goto error; + } + + if ((res = quux(bar, list)) != RES_OK) goto error; + +exit: + if (out_list != NULL) *out_list = list; + return res; +error: + if (list) { mem_rm(list); list = NULL; } + goto exit; +} +.Ed .Sh LES PROGRAMME EN LIGNE DE COMMANDE .\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" .Sh FICHIERS