• Aucun résultat trouvé

Langage C Modularité inter-fichiers

N/A
N/A
Protected

Academic year: 2022

Partager "Langage C Modularité inter-fichiers"

Copied!
17
0
0

Texte intégral

(1)

Langage C

Modularité inter-fichiers

(2)

Rappel : structure générale d’un programme

#include librairies standard

#define CONSTANTES SYMBOLIQUES Déclaration des fonctions ;

int main {

appel aux fonctions;

return 0;

}

Définition des fonctions

Fichier main.c

(3)

Rappel : structure générale d’un programme

#include librairies standard

#define CONSTANTES SYMBOLIQUES Déclaration des fonctions ;

int main {

appel aux fonctions;

return 0;

}

Définition des fonctions Fichier main.c

Les fonctions ne sont

utilisables que dans ce fichier

Si on veut les réutiliser ailleurs, on ne va pas faire des copier-coller ...

On va les répartir dans un ou plusieurs fichiers sources dits librairies → Modularité

interfichiers

(4)

Avantages de la modularité interfichiers

- hiérarchisation des problèmes, - lisibilité,

- réutilisation,

- modifications centralisées,

- compilation séparée.

(5)

Fichier main.c

Principe

#include librairies standard

#define CONSTANTES SYMBOLIQUES /*Entête*/

void init_tab(int tab[],int dim) ;

/*Entête*/

void save_fichier(char *nom, int tab[],int dim);

int main {

appel aux fonctions;

return 0;

}

void init_tab(int tab[],int dim) {code de la fonction}

void save_fichier(char *nom, int tab[],int dim) {code de la fonction}

1. On crée un fichier source .c par thème et on l’inclut dans le projet Code Blocks :

Fichier tableaux.c

Fichier fichiers.c

(6)

Fichier main.c

Principe

#include librairies standard

#define CONSTANTES SYMBOLIQUES /*Entête*/

void init_tab(int tab[],int dim) ;

/*Entête*/

void save_fichier(char *nom, int tab[],int dim);

int main {

return 0;

} 1. On crée un fichier source .c par thème et

on l’inclut dans le projet Code Blocks : On y copie les définitions

Fichier tableaux.c

void init_tab(int tab[],int dim)

{code de la fonction}

Fichier fichiers.c

void save_fichier(char *nom, int tab[],int dim)

{code de la fonction}

(7)

Fichier main.c

Principe

#include librairies standard

#define CONSTANTES SYMBOLIQUES /*Entête*/

void init_tab(int tab[],int dim) ;

/*Entête*/

void save_fichier(char *nom, int tab[],int dim);

int main {

return 0;

}

Fichier tableaux.c

void init_tab(int tab[],int dim)

{code de la fonction}

Fichier fichiers.c

void save_fichier(char *nom, int tab[],int dim)

{code de la fonction}

2. On crée un fichier d’en-tête .h par thème :

Fichier tableaux.h Fichier fichiers.h

1. On crée un fichier source .c par thème et

on l’inclut dans le projet Code Blocks :

On y copie les définitions

(8)

Fichier main.c

Principe

#include librairies standard

#define CONSTANTES SYMBOLIQUES

int main {

return 0;

}

Fichier tableaux.c

void init_tab(int tab[],int dim)

{code de la fonction}

Fichier fichiers.c

void save_fichier(char *nom, int tab[],int dim)

{code de la fonction}

2. On crée un fichier d’en-tête .h par thème : on y copie les déclarations avec les en-têtes

Fichier tableaux.h

/*Entête*/

void init_tab(int tab[],int dim) ;

Fichier fichiers.h

/*Entête*/

void save_fichier(char *nom, int tab[],int dim);

1. On crée un fichier source .c par thème et

on l’inclut dans le projet Code Blocks :

On y copie les définitions

(9)

Fichier main.c

Compilation séparée

#include librairies standard

#define CONSTANTES SYMBOLIQUES

int main {

return 0;

}

Fichier tableaux.c

#include <stdio.h>

void init_tab(int tab[],int dim)

{code de la fonction}

Fichier fichiers.c

#include <stdio.h>

void save_fichier(char *nom, int tab[],int dim)

{code de la fonction}

Fichier tableaux.h

/*Entête*/

void init_tab(int tab[],int dim) ;

Fichier fichiers.h

/*Entête*/

void save_fichier(char *nom, int tab[],int dim);

3. On ajoute dans chaque fichier source les librairies nécessaires à sa compilation

“autonome”

2. On crée un fichier d’en-tête .h par thème : on y copie les déclarations avec les en-têtes

(10)

Fichier main.c

Utilisation des nouvelles librairies

#include librairies standard

#include “tableaux.h”

#define CONSTANTES SYMBOLIQUES

int main {

appel aux fonctions de tableaux.c

return 0;

}

Fichier tableaux.c

#include <stdio.h>

void init_tab(int tab[],int dim)

{code de la fonction}

Fichier fichiers.c

#include <stdio.h>

void save_fichier(char *nom, int tab[],int dim)

{code de la fonction}

Fichier tableaux.h

/*Entête*/

void init_tab(int tab[],int dim) ;

Fichier fichiers.h

/*Entête*/

void save_fichier(char *nom, int tab[],int dim);

3. On ajoute dans chaque fichier source les librairies nécessaires à sa compilation

“autonome”

2. On crée un fichier d’en-tête .h par thème : on y copie les déclarations avec les en-têtes

(11)

Fichier main.c

Utilisation des nouvelles librairies

#include librairies standard

#include “tableaux.h”

#include “fichiers.h”

#define CONSTANTES SYMBOLIQUES

int main {

appel aux fonctions de tableaux.c appel aux fonctions de fichiers.c

return 0;

}

Fichier tableaux.c

#include <stdio.h>

void init_tab(int tab[],int dim)

{code de la fonction}

Fichier fichiers.c

#include <stdio.h>

void save_fichier(char *nom, int tab[],int dim)

{code de la fonction}

Fichier tableaux.h

/*Entête*/

void init_tab(int tab[],int dim) ;

Fichier fichiers.h

/*Entête*/

void save_fichier(char *nom, int tab[],int dim);

3. On ajoute dans chaque fichier source les librairies nécessaires à sa compilation

“autonome”

2. On crée un fichier d’en-tête .h par thème : on y copie les déclarations avec les en-têtes

(12)

Fichier main.c

Quelques remarques

#include librairies standard

#include “tableaux.h”

#include “fichiers.h”

#define CONSTANTES SYMBOLIQUES

int main {

appel aux fonctions de tableaux.c appel aux fonctions de fichiers.c

return 0;

}

Fichier tableaux.c

#include <stdio.h>

void init_tab(int tab[],int dim)

{code de la fonction}

Fichier fichiers.c

#include <stdio.h>

void save_fichier(char *nom, int tab[],int dim)

{code de la fonction}

2. Les .h (pour header) ne sont pas des fichiers source : ils ne sont pas compilables.

Fichier tableaux.h

/*Entête*/

void init_tab(int tab[],int dim) ;

Fichier fichiers.h

/*Entête*/

void save_fichier(char *nom, int tab[],int dim);

1. tableaux.c et fichiers.c peuvent être

compilés séparément : intérêt pour les

gros fichiers et la centralisation des

modifications et du déboggage

(13)

Les #include

#include<…> ira chercher le .h dans les bibliothèques préinstallées.

exemple : #include<stdio.h>

Sinon :

si le fichier fichier.h est dans le répertoire du projet courant on écrira :

#include"fichier.h"

si le fichier fichier .h est dans un autre répertoire, on écrira le chemin d’accès complet au fichier, par exemple :

#include "C:\\transfert\\Sylvie\\Enseignement en

C\\Enseignement en C 2013\\td8\\Fichiers pour les

élèves\\fichier.h"

(14)

Compilation conditionnelle

Quand on ouvre un nouveau fichier .h, tableaux.h par exemple, CodeBlocks génère les lignes en vert ci-dessous :

#ifndef TABLEAUX_H_INCLUDED

#define TABLEAUX_H_INCLUDED

Mettre ici les prototypes des fonctions

#endif // TABLEAUX_H_INCLUDED

TABLEAUX_H_INCLUDED est un identificateur. S’il est rencontré pour la 1 ère

fois par le processeur, le texte situé entre #define et #endif est inclus. Sinon, il n’est pas pris en compte.

Application : protection des fichiers d'en-tête contre les inclusions

multiples.

(15)

MODULARITÉ INTER-FICHIERS

POUR AMÉLIORER LA RÉUTILISATION

- Regroupement de fonctions par catégorie dans des fichiers séparés / bibliothèques :

- un fichier header .h : comportant les prototypes de toutes les fonctions

- un fichier source .c : comportant les définitions de toutes les fonctions répertoriées dans le .h

- Recherche des fonctions facilitée - Modification centralisée

- Compilation séparée

tableau1D.h tableau1D.c

complexe.h complexe.c

(16)

MODULARITÉ INTER-FICHIERS

EXEMPLE - TABLEAU.H / TABLEAU.C

tableau1D.h tableau1D.c

#ifndef TABLEAU1D_H_INCLUDED

#define TABLEAU1D_H_INCLUDED

#include <stdlib.h>

#include <stdio.h>

/*

* afficheTab : Affiche un tableau 1D * ENTREES :

* tab : tableau à afficher * dim : dimension du tableau * Auteur : Villou - 30/06/2017 */

void afficheTab(int tab, int dim);

/* … */

void triTabCroissant(int tab, int dim);

[...]

#endif // TABLEAU1D_H_INCLUDED

#include “tableau1D.h”

/*

* afficheTab : Affiche un tableau 1D * ENTREES :

* tab : tableau à afficher * dim : dimension du tableau * Auteur : Villou - 30/06/2017 */

void afficheTab(int tab, int dim){

int i;

for(i = 0; i < dim; i++)

}

/* … */

void triTabCroissant(int tab, int dim){

}

[...]

main.c #include <stdlib.h>

#include <stdio.h>

#include “tableau1D.h”

int main(void){

afficheTab(montab, 10);

(17)

EN-TÊTE DE FONCTIONS

POUR AMÉLIORER L’UTILISATION

/*

* aireRectangle : Calcul de l’aire d’un rectangle * ENTREES :

* a,b : Largeur et longueur (double) * SORTIE :

* Aire du rectangle (double)

* Auteur : Villou – Création : 30/06/2017 * Modifié par Arthur, le 02/07/2017 */

double aireRectangle(double a, double b)

- A inclure dans les fichiers header .h (voir diapo

précédente)

Références

Documents relatifs

D’un côté le Commandant NAPO épaulé par le capitaine TRENCAVEL pour mener les troupes françaises dans leur mission de reconnaissance avant l’assaut final..

Les contrats d'assurance, souscrits par toute personne physique ou morale autre que l'Etat et garantissant les dommages d'incendie ou tous autres dommages à des biens situés en

 Certains moteurs ont des conditions de fonctionnement ( ipsotherme, commande externe, condition climatique ).2.  Tout le matériels

Si vous n'avez pas encore installé lame, laissez-vous guider pour mettre le fichier lame_enc.dll dans le répertoire d'audacity et pour le « dire» à audacity, ensuite vous n'aurez

- roches des Alpes minéraux caractéristiques d'un métamorphisme de subduction - glaucophane, jadéite, grenat dans les schistes bleus et éclogites. - minéraux retrouvés au moment

Crise biologique : modifications brutales, à l'échelle des temps géologiques, et globales liées à des évenements planétaires affectant le monde vivant.. - taux

[r]

L’épreuve se déroulera en 1 ES à parcourir 4 fois, le Road Book sera dévoilé la veille de l’épreuve MAIS La météo sera toujours gardée secrète jusqu’au début de