« Conseils de codage en C/Recherche des erreurs » : différence entre les versions

Contenu supprimé Contenu ajouté
+ sommaire
Thierry46 (discussion | contributions)
Numérotation des exigences : c_rec_1 à c_rec_15
Ligne 2 :
L'application de ces conseils facilite la recherche des erreurs et permet d'en éviter certaines.
 
== Des identificateurs plus parlants (c_rec_1) ==
Utilisez des identificateurs parlants pour les variables. Le nom d’une variable devra rappeler son rôle ou son utilité.
 
Ligne 13 :
*Bon : numMaille
 
==Sortie de boucle (c_rec_2)==
La sortie d’une boucle (do, while, for) doit se faire par la condition de test.
 
Ligne 30 :
</source>
 
==for pour contrôler les boucles (c_rec_3)==
L’instruction d’une boucle for ne doit contenir aucune instruction vide. De plus, chacun de ses membres doit porter sur au moins une variable commune.
 
Ligne 36 :
L’instruction '''for''' doit permettre le contrôle total d’une itération. Si une instruction est vide, cela veut dire que la boucle aurait pu être écrite sous une autre forme ('''do''' ou '''while''').
 
==Mettre des parenthèses dans les expressions (c_rec_4)==
Les expressions arithmétiques et logiques doivent être placées entre parenthèses.
 
Ligne 48 :
*Bon : if ( ( n & 1 ) == 0 ) ...
 
==Mettre des parenthèses autour des paramètres des macros (c_rec_5)==
Les macros doivent être écrites avec des parenthèses autour de leurs paramètres.
 
Ligne 58 :
Meilleur : <code>#define double(a) 2 * (a)</code> : l’appel double(2+1) sera étendu en 2 * (2 +1) : vaudra 6
 
==Ne pas écrire de macro de plus de 5 instructions (c_rec_6)==
===Justification===
Au-delà de 5 instructions, le déroulement est assimilable à un traitement, et doit faire partie intégrante d’une fonction. De plus, les macros instructions ne permettent pas un contrôle strict de leurs paramètres.
Ligne 64 :
Si l'utilisation d'une fonction entraîne une dégradation des performances, il faut recourir à l’inlining. Le mot clé C99 inline répond à ce problème.
 
==Pas d'opérateurs unaire à l'appel des macros (c_rec_7)==
Ne pas placer d’opérateurs unaire (++, --) dans les paramètres d’appel des macros.
 
Ligne 70 :
Le résultat est bien souvent imprévisible par suite des effets de bord, surtout en cas de répétition du paramètre dans la définition de la macro.
 
==Éviter les problèmes d'inclusion multiple (c_rec_8)==
On protégera chaque fichier d’en-tête .h des inclusions multiples.
 
Ligne 86 :
</source>
 
==Mélange d'opérateur arithmétique et relationnel (c_rec_9)==
Le calcul d’une expression complexe au sein d’une condition est à éviter.
 
Ligne 92 :
Facilite l’analyse des sources, évite de superposer les erreurs de priorité des opérateurs arithmétiques à ceux des opérateurs relationnels.
 
==Prototypes de fonction (c_rec_10)==
Les fonctions doivent être prototypées, une fonction ou une variable ne doit pas avoir de type par défaut.
 
Ligne 102 :
Le contrôle du peut être effectué en utilisant le compilateur C avec options les plus strictes ou un outils qualité comme lint ou splint.
 
==Les variables ne doivent pas se masquer (c_rec_11)==
Une variable ne doit pas en masquer une autre. Cela se produit lorsque deux variables ont le même nom dans des blocs imbriqués.
 
Ligne 125 :
Si la deuxième déclaration de i est supprimée, alors il y a un risque pour que l’incrémentation ne le soit pas, ce serait alors la variable déclarée hors du bloc qui serait utilisée, ce qui ne serait pas le comportement souhaité. Le code resterait alors valide et aucun problème ne serait détectée.
 
==Pas de suppression de l'attribut const (c_rec_12)==
===Justification===
Selon le compilateur, il est possible que les données const soient stockées dans une zone accessible en lecture, mais pas l’écriture.
 
==Limiter l'utilisation des pointeurs (c_rec_13)==
Éviter l’utilisation des pointeurs. Préférer l’utilisation des indices de tableau.
 
Ligne 135 :
L’utilisation abusive de pointeurs est la source de graves dysfonctionnements très difficiles à détecter. Les programmeurs habitués à d’autres langages sont souvent perdus face à certaines subtilités du C. Pour les parcours de tableaux, il est préférable d’utiliser des indices (tab[i]) au lieu d’indirection par pointeur.
 
==Utiliser le mot - clé const (c_rec_14)==
Utiliser le mot - clé ANSI const pour définir :
*Une variable non modifiable.
Ligne 143 :
Rejette, dès la phase de compilation, certaines modifications abusives.
 
==Affectations et identificateurs de tableau (c_rec_15)==
Être prudent lors de l'utilisation des identicateurs de tableau et des pointeurs sur chaîne constante.