logo xgarreau.org Quoi ma tête ?
xavier@xgarreau.org
Les Librairies en C
Version imprimable

Rédaction : Commençons par quelques généralités.

Si vous voulez que votre librairie soit réutilisable et efficace, vous devez respecter quelques notions fondamentales de la programmation.

  • Limitez au minimum les variables globales. Préférez, lorsque c'est possible, de passer des paramètres au fonctions plutôt que d'utiliser les variables globales. C'est plus facile de s'y retrouver et ça occuppe moins de mémoire.
    Par exemple, si vous avez une fonction qui traite les données d'un tableau dont vous devez connaitre le nombre d'éléments :
    Pas Bien !
    Cette solution fait appel à une variable globale pour connaitre la taille du tableau. C'est déconseillé !
    /*
     *  ...
     */
    int tailleTab;
    
    long * traiteTab (long * tab) {
    /*
     *
     * Traitement des données
     *
     */
    }
    /*
     *  ...
     */
    

    Bien !
    Ici, la taille du tableau est passée en paramètre à la fonction. C'est mieux !
    /*
     *  ...
     */
    long * traiteTab (long * tab, int tailleTab) {
    /*
     *
     * Traitement des données
     *
     */
    }
    /*
     *  ...
     */
    
  • Commentez vos sources ! Comment voulez vous vous y retrouver rapidement dans le code de quelqu'un d'autre ou même le vôtre si il n'y a aucun commentaire ? Celà est surtout vrai pour les fichiers d'en tête, expliquez ce que font les fonctions et ce que sont les arguments. (Je sais, c'est moins chiant à dire qu'à faire)
  • Evitez le plus possible les structures spécifiques à une application particulière. Par exemple, si vous utilisez des chaines de moins de 50 caractères dans votre application, ne limitez pas vos variables à cette valeur. Qui sait si votre patron ne va pas décider dans deux jours que les chaînes doivent pouvoir comporter 1000 caractères ? (Je vous jure que ça arrive ! ;-) ). Préférez toujours, quand c'est possible, une allocation dynamique de mémoire à vos variables. (voir malloc(), realloc(); calloc() et free())
  • Lorsqu'on utilise des fichiers d'en têtes abondamment, il y a un risque d'en inclure un plusieurs fois, ce qui allonge le temps de compilation et produit éventuellement des erreurs. pour pallier à ce problème, on utilise la clause #ifndef __NOM_FICHIER_H.
    Par exemple, si votre fichier s'appelle monTest.h, placez ceslignes au début et à la fin du fichier:
    Si le fichier à été inclus, _MON_TEST_H est défini et il ne le sera pas à nouveau.
    #ifndef _MON_TEST_H
    #define _MON_TEST_H 1
    /*
     *  ...
     *ici, le contenu normal du fichier monTest.h
     *  ...
     */
    #endif
    

Les "chemins"

La directive #include : pour inclure un fichier dans un autre en c, on utilise la directive #include.
On spécifie le chemin relatif entre le fichier incluant et le fichier inclus, par exemple :
#include "mesH/monTest.h"
ou bien on place le fichier .h dans le répertoire ou le compilateur s'attend à trouver les fichiers .h. (regardez dans /usr/include par exemple) et on donne le chemin relatif par rapport à ce répertoire, par exemple :
#include <orb/orbit.h>
Nota Bene : On peut également spécifier d'autres chemins de recherche grâce à l'option -I de gcc, par exemple, pour y inclure le répertoire courant :
gcc -I. etc...

Pour devenir incollables sur ces amusantes petites choses, apprenez par coeur les man pages de gcc et ld. ;-)

Plus d'infos sur cette page ?

Consultez les pages man des fonctions d'allocation dynamique de mémoire, du compilateur, du linker et celles qui y sont conseillées et tapant dans la console :
	man malloc
	man realloc
	man calloc
	man free
	man gcc
	man ld

Précédent Index Suivant

Auteur : Xavier GARREAU
Modifié le 13.03.2000

Votre avis dans le forum.

Zazou Projets

Développement

Utilisation et culture

Ailleurs

Vieilleries

Bonne parole

Partenaire



Ce site existe depuis le 01/02/2003
Pour rapporter un bug : xavier@xgarreau.org.
Hébergement : Maneya.
Essayez ZazouMiniWebServer !
Votre avis dans le forum.