commit a4536aba9011b7b58efa676c09c9fa700bc695d6
parent c2531bdd925007313fa2b40d3b695b791a9a3ff2
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Fri, 26 Jun 2026 14:56:32 +0200
Ajoute la section sur les mots clés
Diffstat:
| M | doc/fr/star-c.7 | | | 124 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- |
1 file changed, 113 insertions(+), 11 deletions(-)
diff --git a/doc/fr/star-c.7 b/doc/fr/star-c.7
@@ -322,11 +322,11 @@ indenter chaque
.Ql case
ainsi que leur contenu :
.Bd -literal -offset Ds
-switch(opt) {
+switch (opt) {
case 'e':
errno = 0;
epsilon = strtod(optarg, NULL);
- if(errno != 0) err = 1;
+ if (errno != 0) err = 1;
break;
case 'h':
printf("usage: foo [-hov]\en");
@@ -347,7 +347,7 @@ Motiver l'utilisation de plusieurs instructions par ligne par
l'expressivité du code en résultant, qu'une écriture resserrée viendrait
renforcer :
.Bd -literal -offset Ds
-if(x == NULL || y == NULL) { err = 1; goto error; }
+if (x == NULL || y == NULL) { err = 1; goto error; }
x[0] = 1.0; x[1] = 0.0;
y[0] = 0.0; y[1] = 1.0;
.Ed
@@ -653,7 +653,7 @@ en séparant par un espace la fin de la directive et le caractère
.Ql {
qui marque l'ouverture du bloc :
.Bd -literal -offset Ds
-if(foo) {
+if (foo) {
bar();
qux();
}
@@ -684,7 +684,7 @@ Aligner la fermeture du bloc à l'indentation de sa directive, ou, dans
le cas de directives qui se suivent, de l'indentation de la première
directive à l'origine des blocs successifs :
.Bd -literal -offset Ds
-if(foo) {
+if (foo) {
bar();
} else {
qux();
@@ -696,22 +696,124 @@ contrôle que si la clarté du code n'en est pas impactée.
Dans ce cas, l'ouverture et la fermeture du bloc associé se fait sur une
seule et même ligne :
.Bd -literal -offset Ds
-if(foo) { bar(); return 0; }
+if (foo) { bar(); return 0; }
.Ed
.Pp
Ne pas utiliser d'accolades si la structure de contrôle n'est suivie
d'aucune ou d'une seule directive écrite sur la même ligne :
.Bd -literal -offset Ds
-while(foo());
+while (foo());
-if(bar) return 0;
+if (bar) return 0;
+.Ed
+.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+.Sh LES MOTS CLÉS
+Ajouter un espace après chaque structure de contrôle
+.Ql if ,
+.Ql switch ,
+.Ql for
+et
+.Ql while
+pour les différencier des appels de fonctions.
+Ne pas ajouter d'espace après l'ouverture et avant la fermeture des
+parenthèses qui détourent leur(s) expression(s) :
+.Bd -literal -offset Ds
+if (i < 10) {
+ foo(i);
+}
+.Ed
+.Pp
+Ajouter un espace après chaque point virgule qui sépare les expressions
+d'une boucle
+.Ql for
+sauf si l'expression qui suit est vide :
+.Bd -literal -offset Ds
+for (i=0; i<10; foo(i++));
-if(qux) {
- return 1;
+for (;;) { /* Boucle infinie */
+ poll();
+ if(bar) break;
+}
+.Ed
+.Pp
+Assimiler l'instruction
+.Ql sizeof
+à une fonction ; ne pas insérer d'espace entre le mot clé et son
+expression entourée de parenthèses :
+.Bd -literal -offset Ds
+sz = sizeof(int);
+.Ed
+.\""""""""""""""""""""""""""""""""""
+.Ss L'instruction Ql switch
+Limiter à quelques lignes le contenu de chaque
+.Ql case
+d'une instruction
+.Ql switch ,
+celle-ci devant donner à lire la seule répartition des traitements,
+fonction de la valeur que peut prendre l'expression du
+.Ql switch .
+Et non les traitements eux même, sauf s'ils sont triviaux.
+Un
+.Ql case
+au contenu trop fourni est alors le signe d'un manque de structure dans
+l'écriture du programme.
+.Pp
+Toujours ajouter une instruction
+.Ql default
+même si l'ensemble des valeurs que pourraient prendre l'expression du
+.Ql switch
+est censé être couvert par les différents
+.Ql case .
+C'est notamment le cas quand l'expression est une variables de type
+.Vt enum .
+Utiliser alors la directive
+.Sy FATAL ,
+définie par la bibliothèque RSys
+.Pq en-tête In rsys/rsys.h ,
+pour signifier un comportement inattendu.
+Et ainsi pouvoir diagnostiquer une erreur dans la valeur de l'expression
+du
+.Ql switch ,
+ou un
+.Ql case
+manquant :
+.Bd -literal -offset Ds
+switch (i) {
+ case FOO: foo(); break;
+ case BAR: bar(); break;
+ case QUX: qux = 1; break;
+ default: FATAL("Unreachable code\en"); break;
+}
+.Ed
+.Pp
+Ajouter la directive
+.Sy FALLTHROUGH ,
+définie dans le fichier d'en-tête
+.In rsys/rsys.h
+de la bibliothèque RSys,
+en fin des instructions
+.Ql case
+qui s'enchaînent.
+L'ajout de cette directive permet d'expliciter que c'est bien le
+comportement attendu et non l'oublie d'une instruction
+.Ql break ,
+en plus d'éviter un possible message d'avertissement à la compilation
+.Pq option Fl Wimplicit-fallthrought No de Xr gcc 1 Ns
+ :
+.Bd -literal -offset Ds
+switch (c) {
+ case 'a':
+ foo = 1;
+ FALLTHROUGH;
+ case 'b':
+ bar = 1;
+ break;
+ default:
+ usage();
+ break;
}
.Ed
.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.Sh LES MOTS CLÉS
.Sh LE NOMMAGE
.Sh LES FONCTIONS
.Sh LES VARIABLES