Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
Programmation
impérative et langage C
Compilation séparée, bibliothèques et
fichiers
Compléments
� Compilation séparée
� Bibliothèques
� Gestion de fichiers
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Compilation séparée
� Un projet informatique est très souvent découpé en plusieurs fichiers� Partage des tâches entre plusieurs intervenants
� Organisation du code regroupant les modules par fonctionnalités, environnement, etc.
� Réduction du temps de compilation pour les gros projets en ne recompilant que les portions modifiées
� Réutilisation dans d’autres projets
� Génération de l’exécutable� Compilation de chaque fichier source en produisant un fichier
objet
� Edition des liens (fonctions et variables) entre les objets pour produire l’exécutable
� Makefile :� Automatisation de la procédure en ne compilant que les fichiers
modifiés
Génération directe exécutable
� Un seul fichier source (test.c)
gcc test.c –o test
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Exemple : deux fichiers
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
main.c
somme.c
Exemple : deux fichiers (2)
� Deux fichiers sources :
� main.c
� avec stdio.h car printf
� avec le prototype de la fonction somme
� somme.c
� uniquement la fonction
� Compilation séparée avec production de deux objets :
gcc –c main.c
gcc –c somme.c
� Edition de liens :
gcc –o test main.o somme.o
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
makefile
� Fichier makefile :
� Invocation : gmake
� A vous de vous documenter si vous voulez en
savoir plus (ici uniquement introduction)
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Fichiers d’en-tête
� Exemple avec deux fichiers partageant une variable globale� main.c
Fichiers d’en-tête (2)
� fonction.c
� fonction.hmacro FONCTION évite
définitions multiples en cas de
#include imbriqués
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Fichiers d’en-tête (3)
� Peuvent contenir :� Définitions communes à plusieurs fichiers
� Un seul fichier à modifier
� Modifications prises en compte à la compilation suivante
� Macros (#define)
� Prototypes de fonctions� Références à des variables globales (extern)
� Attention aux inclusions multiples� Protection avec un drapeau (macro FONCTION dans l’exemple)
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Fichiers d’en-tête (4)
� Préfixe extern :� Permet de faire référence à une variable déclarée dans un
autre fichier� variable_globale
� Permet son utilisation dans fonction.c
� Cette variable doit être déclarée dans un seul fichier� Dans le fichier main.c (dans cet exemple)
� Chemin :� Pour les fonctions standards (dans /usr/include) :
#include
� Pour les fichiers du projet :#include "[chemin/]fichier.h"
Bibliothèques
� Les bibliothèques contiennent des fonctions destinées à être utilisées
dans plusieurs programmes
� Etape suivante dans la démarche de la compilation séparée
� Grande diffusion
� Bien testées
� Beaucoup de développeurs (logiciels libres) ou produits commerciaux
� Communauté d’utilisateurs (forum, FAQ, etc.)
� Standard C, mathématiques, entrées/sorties, etc.
� Bibliothèque statique
� Inclusion de toutes les fonctions de la bibliothèque à l’édition de
liens
� Bibliothèque dynamique
� Les fonctions sont chargées en mémoire après le lancement du
programme
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Bibliothèques (2)
� Dans Unix/linux
� Bibliothèques dans le répertoire : /usr/lib/
� Si bibliothèque dans un autre répertoire option –L pour gcc :
-L $HOME/personnal_libs/
� Bibliothèque statique : libxxx.a
� Bibliothèque dynamique : libxxx.so
� Fichiers d’en-tête dans le répertoire : /usr/include
� Si fichiers dans un autre répertoire :� Préciser le chemin dans la directive #include
� Option –I pour gcc
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Bibliothèques (3)
� Avantages comparés
� Bibliothèque statique :
� Chaque exécutable est plus volumineux
� La bibliothèque apparait sur disque et en mémoire autant de fois qu’elle est
utilisée
� La présence de la bibliothèque n’est pas indispensable après l’édition de
liens
� Il faut recompiler les programmes à chaque modification de la bibliothèque
� Bibliothèque dynamique :
� Chaque exécutable est plus léger
� La bibliothèque n’existe qu’en un seul exemplaire, sur disque et en mémoire
� La présence de la bibliothèque est indispensable à chaque lancement des
programmes
� Il n’est pas nécessaire de recompiler les programmes à chaque mise à jour
de la bibliothèque
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Bibliothèque statique "projet"
� global_pi.c :
fonction d’initialisation
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Bibliothèque statique "projet"
(2)
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
� global_pi.h :
Fichier d’en-tête
Bibliothèque statique "projet"
(3)
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
� Création : libglobal_pi.a
Bibliothèque statique "projet"
(4)
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
� test.c :
Bibliothèque statique "projet"
(5)
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Autre exemple
� Bibliothèque contenant deux fonctions
� Compilation des deux objets
� Création de la bibliothèque en y insérant les deux objets
� Option –L indispensable
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Autre exemple (2)
� Bibliothèque contenant deux fonctions
� Création de la bibliothèque en y insérant un objet
� Puis insertion du second objet
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Création bibliothèque statique
� Sous Unix/linux utilisation d’un utilitaire de gestion d’archives : ar
� Options utilisées :
� c : création (de la bibliothèque)
� r : insertion d’un fichier dans l’archive, avec remplacement si nécessaire
� s : précise qu’il s’agit d’un fichier objet
� Parfois utilisation de ranlib :
� Accès aléatoire à l’archive
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Gestion de fichiers
� Une structure :
� FILE
� Ouverture et fermeture d’un fichier :
� fopen et fclose
� Actions :
� lecture, écriture, avancer, reculer, etc.
� fscanf, fprintf, fread, fwrite, rewind, etc.
� Illustration rapide avec deux exemples
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Exemple 1
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Exemple 1 (2)
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Exemple 2
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Exemple 2 (2)
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020
Exemple 2 (3)
� Le premier fscanf ne lit que Exemple
� fgets lit toute la ligne (y compris fin de ligne)
Programmation impérative et langage C - Sylvain Tisserant - Polytech Marseille / INFO3 - 2020