Bibliothèques de fonctions
Objectifs du chapitre
Découper une application en fonctions réutilisables.
Appeler ces fonctions dans une application.
Présentation
Ce chapitre montre, à partir de l’exemple du travail pratique « Structures de données » du chapitre précédent, comment découper une application.
Il s’agit de :
-
regrouper les fonctions dans un fichier séparé ;
-
regrouper les prototypes et les définitions de données (typedef) dans un autre fichier ;
-
mettre le programme principal dans un troisième fichier.
Les fonctions peuvent ainsi être utilisées dans toute application qui en a besoin.
Création d’une bibliothèque de fonctions
1. Découpage de l’application "Structure de données"
L’application "Structure de données" du chapitre précédent comporte trois parties :
-
Les déclarations de la structure (typedef) et des prototypes des fonctions.
-
La fonction main() pour effectuer les tests.
-
Les fonctions de gestion des fractions.
typedef et prototypes
typedef struct
{
int Num;
int Den;
} FRACTION;
void saisie(FRACTION*);
void affiche(FRACTION);
FRACTION somme(FRACTION, FRACTION);
int pgcd(int, int);
Programme principal
int main()
{
FRACTION f1, f2, f3;
. . .
return 0;
}
Fonctions
void saisie(FRACTION* pf)
{
. . .
}
FRACTION somme(FRACTION f1, FRACTION f2)
{
. . .
}
int pgcd(int n1, int n2)
{
. . .
}
void affiche(FRACTION f)
{
. . .
}
2. Création d’un nouveau projet
Chacun des morceaux du découpage est placé dans un fichier :
-
Le typedef et les prototypes dans le fichier fractions.h ;
-
Le programme principal dans le fichier main.c ;
-
Les fonctions dans le fichier fractions.c.
Nous allons stocker...
Utilisation d’une bibliothèque de fonctions
1. Création de dossiers pour la bibliothèque de gestion des fractions
La copie d’écran ci-dessous représente l’arborescence d’un dossier appelé "C".
Il contient un sous-dossier utilitaires, lui-même décomposé en deux sous-dossiers : binaires et entetes :
Le dossier entetes est destiné à recevoir les « headers » des fonctions : ici le fichier fractions.h.
Le dossier binaires est destiné à recevoir la bibliothèque compilée : ici, le résultat de la compilation de fractions.c. Le fichier généré par le compilateur s’appelle fractions.o.
Les fichiers « fractions.o » et « fractions.h » ont été recopiés (copiés/collés) depuis le projet « biblFractions ».
2. Utilisation de la bibliothèque de gestion des fractions
a. Création d’un nouveau projet : biblFractionsReference
Ce projet ne contient qu’un fichier main.c dans lequel on s’est contenté de faire un "copié-collé" du main.c du projet de mise au point biblFractions :
. . .
#include "fractions.h"
int main()
{
. . .
}
b. Compilation du projet...
Travail pratique : bibliothèque de fonctions - chaînes
1. Objectif
Cet exercice est une application directe du cours. Il s’agit d’organiser les fonctions sous forme d’une bibliothèque afin de pouvoir les réutiliser dans d’autres applications. Il n’y a pas de développement de fonctions.
2. Sujet
-
Regrouper les fonctions de gestion des chaînes (Travail pratique « Fonctions et chaînes » du chapitre Les fonctions) en une bibliothèque.
-
Écrire un programme de test.
3. Bibliothèque de fonctions - chaînes : proposition de correction
a. Projet biblchaines
b. Fichier chaines.h
C’est le regroupement des prototypes des cinq exercices :
int compteLettres(char* ligne, char lettre);
void enleveLettres(char* ligne, char lettre);
char* inverse(char* ligne);
int pcdc(char* chaine, int* pc, int *dc);
void placeSousChaine(char* chaine, char* sChaine, int pos, char cadrage);
c. Fichier chaines.c
C’est la recopie des cinq fonctions. Il faut ajouter le include du header :
. . .
#include "chaines.h"
int compteLettres(char* ligne, char lettre)
{
. . .
}
void enleveLettres(char* ligne, char lettre)
{
. . .
}
char* inverse(char* ligne)
{
. . .
}
int pcdc(char*...