Skip to content

Programmation en C : bonnes pratiques

13 décembre 2011

En tant qu’assistant de TP d’informatique pour les élèves de 2e année à l’École Préparatoire Scientifique et Technique de Tlemcen, j’ai pour mission de contribuer à leur apprentissage des rudiments de la programmation en C. L’un de mes soucis est de les aider à prendre de bonnes habitudes.

Pour inaugurer ce blog, je commencerai donc par énumérer quelques conseils que j’ai glanés ici et là sur différents livres et sites parlant de programmation en C.

  1. Le manuel Unix :
    Quand on a oublié comment utiliser la fonction realloc(), ou quelles sont les options de gcc, ou encore quelles sont les fonctions du fichier string.h, la commande man (suivie du nom de la fonction, de la commande ou du fichier) peut être une aide précieuse si le prof n’est pas à côté.
  2. L’indentation :
    Il m’est très désagréable de lire des instructions sans aucun retrait ou, pire, mal indentées. Les éditeurs de texte permettent souvent de régler le nombre d’espaces générées par l’appui sur la touche tabulation. Des indentations de 8 espaces donnent un résultat convenable, mais, contrairement à Linus, je ne suis pas contre celles de 4 ou de 3. La commande indent de GNU permet non seulement de disposer les instructions correctement mais insère aussi des espaces qui peuvent s’avérer utiles.
    $ indent  -kr  fichier_source.c
    l’option -kr (Kernighan et Ritchie) permet entre autres d’éviter que les types de retour des fonctions soient isolés sur une ligne.
  3. L’option -Wall de gcc :
    Elle active tous les types d’avertissements (all Warnings).
    $ gcc  -Wall  fichier_source.c  -o fichier_executable 
    Les avertissements ne sont pas des erreurs à proprement parler mais ils indiquent presque toujours une réelle erreur logique. Il n’est pas toujours évident de trouver les erreurs du genre  if  (a = 0) ... ou encore while  (i  =!  0)... (bien que cette dernière puisse être mise en évidence par indent, qui la transforme en while  (i  =  !0)...).
  4. Les commentaires :
    S’il est déconseillé d’encombrer son code avec des commentaires qui expliquent comment on a fait quelque chose (le lecteur est sensé comprendre le C, et si un passage est trop compliqué pour qu’il le comprenne sans commentaires, mieux vaut le simplifier tout de suite), il est recommandé d’expliquer pourquoi on a fait certaines choses. Mieux vaut également éviter les commentaires à la fin des lignes d’instructions qui les rallongent inutilement et risquent de ne pas être visibles à l’écran.
  5. Découper le code :
    Les fonctions ne devraient contenir que peu d’instructions. Si une fonction a plus de 80 lignes de code, c’est qu’elle doit être divisée. Cela s’applique évidemment à la fonction main() également !
  6. Attention aux déclarations multiples de pointeurs :
    La ligne suivante :
    char*  chaine1,  chaine2;

    ne définit pas deux chaînes de caractères mais une chaîne et un caractère. D’ailleurs indent corrige la place des espaces pour le rendre plus évident :
    char  *chaine1,  chaine2; 
  7. Faire le ménage dans la mémoire :
    Quand on a fini de manger, on débarrasse la table de toutes les assiettes et les verres. Quand on en a fini avec une variable allouée dynamiquement (par malloc(), calloc() ou realloc()), on libère la mémoire qu’elle occupe avec free(). Ne pas oublier d’affecter la valeur NULL au pointeur ensuite.
  8. Les fichiers .h :
    Les fichiers d’en-tête (header files en anglais) servent à déclarer les prototypes des fonctions ! Il est fortement déconseillé d’y mettre du code. Les définitions des fonctions déclarées (avec les instructions qui forment leur corps) doivent être mises dans un fichier .c qui pourra être compilé séparément.
  9. Le choix des identificateurs :
    Les variables et fonctions devraient toujours avoir un nom significatif, sauf quand il s’agit de variables à très faible portée. Inutile donc de faire des for(compteur=0 ; compteur<max ; compteur++), ça ne ferait qu’encombrer le code : un i suffit… Par contre, appeler une variable globale a, b ou t n’est généralement pas une bonne idée. Autre chose : la convention veut que les constantes soient écrites en majuscules et les variables en minuscules.
  10. scanf("%s",...) et gets() :
    Ne pas utiliser ces fonctions pour obtenir une chaîne de caractères tapée par l’utilisateur (le manuel de gets() le déconseille d’ailleurs). Préférer fgets(), même si son utilisation est légèrement plus compliquée.
  11. … (à suivre)
Publicités

From → C, Programmation

Laisser un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :