Blog ENI : Toute la veille numérique !
💥 Un livre PAPIER acheté
= La version EN LIGNE offerte pendant 1 an !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Développement informatique
  3. Bibliothèques de fonctions
Extrait - Développement informatique Apprenez à concevoir avant de programmer
Extraits du livre
Développement informatique Apprenez à concevoir avant de programmer
3 avis
Revenir à la page d'achat du livre

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 :

images/01074a.png

Le dossier entetes est destiné à recevoir les « headers » des fonctions : ici le fichier fractions.h.

images/fractionH.PNG

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

images/fractionO.PNG

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

images/01074d.png

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

images/01075a.png

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*...