28
Programmation impérative et langage C Compilation séparée, bibliothèques et fichiers

Programmation impérative et langage C · 2020. 12. 3. · Standard C, mathématiques, entrées/sorties, etc. Bibliothèque statique Inclusion de toutes les fonctions de la bibliothèque

  • Upload
    others

  • View
    2

  • 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