Il est né ?
Vous êtes ici : mk0phpgtk.xgarreau.org >> aide >> devel >> libclinux : Librairies en c sous linux
Version imprimable
On rentre enfin dans le vif du sujet avec cette page. On va en effet maintenant suivre un exemple pas à pas pour construire une librarie, la compiler, l'utiliser dans un exécutable sous ses formes statiques et dynamiques.
On va prendre l'exemple d'un librairie comportant une fonction permettant de trier un tableau contenant des entiers longs. La méthode de tri sera le tri par bulles. Je ne suis pas sûr que ce soit l'algorithme exact mais ça y ressemble et ça marche alors ... Roule !

Rédaction : le fichier d'en têtes

Bien entrons dans le vif du sujet ! ouvrez un éditeur de texte et tapez ça dans un fichier tri_a_bulles.h :

tri_a_bulles.h
/*
 * tri_a_bulles.h
 *
 * Quelques fonctions pour opérations basiques sur un tableau de longs.
 *
 * auteur: Xavier GARREAU : xgarreau@club-internet.fr
 *
 * web : http://perso.club-internet.fr/xgarreau/
 *
 * dmodif: 13.03.2000
 *
 */
#ifndef _TRI_A_BULLES_H
#define _TRI_A_BULLES_H 1

/*
 * test_case_tableau : Dans le tableau pointé par addr_tableau,
 *   Vérifie que la case case case_tableau est bien placée par rapport à celle qui la précède
 *   Si ce n'est pas le cas, permute les cases et se rappelle su la case précédente.
 *   La récurrence s'arrête quand
 *     la case case case_tableau est bien placée par rapport à celle qui la précède
 *     ou bien si case_tableau vaut prem_case_tableau.
 *   Ne renvoie rien.
 *
 */
void test_case_tableau ( long * addr_tableau, int taille_tableau, int case_tableau, int prem_case_tableau );

/*
 * permut_cases :
 *   permute les valeurs des cases case_1 et case_2 du tableau pointé par addr_tableau
 *   Ne renvoie rien.
 *
 */
void permut_cases ( long * addr_tableau, int case_1, int case_2 );

/*
 * test_tableau :
 *   renvoie le tableau pointé par addr_tableau trié (ordre croissant)
 *     de la case prem_case_tableau
 *     à la case taille_tableau-1
 *
 */
long * test_tableau ( long * addr_tableau, int prem_case_tableau, int taille_tableau );

/*
 * nb_cases_tableau :
 *   Renvoie le nombre de cases du tableau pointé par addr_tableau
 *     càd nombre de cases allouées
 *     ou première case contenant (long)NULL si le tableau en contient une.
 *
 */
int nb_cases_tableau ( long * addr_tableau );

#endif

Si vous êtes familier avec les fichiers .h, pas de problème. Sinon, disons qu'on se contente de définir les "prototypes" des fonctions, on écrira leur corps dans un fichier .c.
Les fichiers .h permettent au compilateur de connaitre les prototypes des fonctions qu'il rencontre dans les différents fichiers.c qui les utilisent.

Je m'explique ! Les fonctions définies dans un fichier .c peuvent être utilisées dans un autre, ça vous le savez ! (hein ? vous le savez ?) Il suffit de préciser au compilateur tous les fichiers à compiler (gcc fic1.c fic2.c ... ficn.c). Si par hasard vous commettez une erreur en appelant une fonction, vous verrez que la compilation se passera sans problème, MAIS, lors de l'exécution vous obtiendrez des résultats inattendus ou pire, une erreur. Brrrrrrrrrrrr ... Flippant non ?

Bon, si on programmait ? Un petit peu de récursivité maintenant ? GO ! BANZAI ! --- Cliquez sur Suivant !


Précédent Index Suivant

a+

Auteur : Xavier GARREAU
Modifié le 22.09.2004

Rechercher :

Google
 
Web www.xgarreau.org