Compilation séparée (2) – Dépendances.

compilation_separee-2

Cet article est la suite directe de celui d’hier, qui s’intitulait Généralités sur la compilation séparée en C. Je rappelle pour ceux qui tomberaient précisément sur cette page que cet article s’inscrit dans une suite de quatre articles traitant de la compilation séparé, et qu’il est suivit des articles  Compilation séparée (3) – Fichiers objets et compilation manuelle et   Compilation séparée (4) – Le Makefile. Aujourd’hui, nous allons étudier la mise en oeuvre de la compilation séparée, et je vous expliquer la raison d’être des jolies flèches sur mon schéma.

3) Un petit exemple pour mieux comprendre:

Comme vous le voyez, j’ai pris un cas facile à imaginer: on veut faire un programme dans lequel un humain va conduire une voiture. Pour cela, il faut:

  1. Le code C (par exemple une structure) qui va caractériser un humain, et toutes fonctions utilitaires qui vont avec,
  2. De même, le code C qui caractérise une voiture,
  3. Et enfin le code C qui va leur permettre d’interagir.

On notera tout l’intérêt de la compilation séparée dans cet exemple. En effet on pourrait par exemple imaginer:

  • qu’un collègue a déjà développé tout le code qui caractérise l’humain. Auquel cas il suffira de recompiler le fichier une seule fois puis de l’utiliser tel quel.
  • que plus tard on veuille créer un programme dans lequel un humain conduit un camion. Auquel cas il suffirait de créer le code C caractérisant le camion, et de modifier à peine le code d’interaction, mais sans avoir besoin de toucher à celui de l’humain
  • etc. Notons encore que l’humain et la voiture étant deux choses totalement différentes, il aurait de toute manière été illogique et peu clair de les mettre dans un unique fichier.

4) Rappel: utilité du .h

Comme vous le savez sans doute, il est de coutume d’utiliser conjointement un fichier .c et un fichier .h. Le fichier.h contient les prototypes des fonctions (c’est à dire leur déclaration avec juste un point virgule à la fin et non des accolades comme lorsque l’on les implémente), des commentaires qui les décrivent, et les déclarations des structures utilisés. L’utilité est double:

  • D’abord ça permet d’aérer le fichier .c contenant tout le code, et de l’organiser comme on le désire. On n’est plus astreint par exemple, de déclarer toutes les fonctions avant le main, car le #include « fichier.h » que l’on place au début aura pour effet de copier-coller à l’endroit où il est placé (c’est à dire généralement en tête de fichier), l’intégralité du fichier .h correspondant.
  • Ensuite ça permet dans le cadre de la compilation séparée d’inclure le fichier .h d’un programme simple dans le fichier .h d’un programme plus compliqué, afin de pouvoir utiliser ses structures et ses fonctions. Dans le cadre de notre exemple, voiture.h et humain.h sont par exemple inclus dans conduire.h, ce qui permet à conduire.c de manipuler des humains, des voitures, et leurs fonctions respectives dans le programme conduire.c

Le .h est également très utiles lorsque l’on veut savoir où l’on va. Ainsi il est fortement conseillé lorsque l’on est confronté à un problème, de ne pas commencer à faire le code bille en tête, et puis d’extraire à la fin les commentaires, les déclarations et structures dans un fichier .h juste pour faire plaisir au prof de TP, mais au contraire de commencer par réaliser le fichier .h avant de commencer à coder le fichier .c. En effet de même qu’avant de partir en voyage, on prépare le chemin à l’aide d’une carte, car avant de partir, il faut déjà savoir où l’on va, de même on gagnera énormément de temps au final en prévoyant à l’avance les fonctions qui vont être nécessaires ce qui permettra de plus d’avoir une vision globale du résultat attendu à tout moment du développement.

5) Explication du graphe

Alors pour le graphe, je n’ai pas cherché à reprendre celui que les profs utilisent, j’ai fait à mon idée en suivant la logique, avant de me rendre compte que ça ressemblait quand même énormément. En fait en général les profs utilisent les flèches pour schématiser les inclusions de code, tandis que moi je les utilise pour schématiser les dépendances. Ainsi les flèches qui partent de chaque objet pointent vers celui qui en est directement dépendant. Quelques exemples:

  1. humain.c a besoin que humain.h existe.
  2. voiture.c a besoin que voiture.h existe.
  3. conduire.h a besoin que humain.h et voiture.h existent.
  4. conduire.c a besoin que conduire.h (et ses dépendances), voiture.c et humain.c existent.
  5. Chaque fichier objet .o a besoin que le fichier.c qui lui correspond existe,
  6. et le programme exécutable a besoin de la totalité du code, puisqu’il dépend des trois fichiers.o

…Et ce sera tout pour aujoud’hui (c’est déjà pas mal). Demain nous étudierons la mise en oeuvre de tout ça, à quoi servent les fichiers .o et quelques exemples de compilation. Je ferais peut être un article séparé sur le makefile, je ne sais pas encore…

Publicités

4 réflexions au sujet de « Compilation séparée (2) – Dépendances. »

  1. aldiansblog Auteur de l’article

    Je ne connais pas le C#, mais je sais programmer en java, et wikipedia me dit que c’est un peu la même chose. Je n’ai pas vraiment réfléchi à la question, mais a priori, je dirais que les raisons qui s’appliquent au C comme l’économie de temps machine, et la clarification du projet par la séparation des objets distincts doivent rester valables en POO. Après tout dans le cadre du java, on peut par exemple (et je l’ai déjà fait) créer un projet sur un thème bien précis, le tester et l’exporter sous la forme de librairie .jar. Ensuite si dans un autre projet on a besoin des classes, il suffit d’importer la librairie.

    Mais je pense que ça s’applique moins tout de même. C’est quand même différent, et moins vital que dans le cadre du C.

  2. Ping : Compilation séparée (3) - Fichiers objets et compilation manuelle. « Aldian’s Blog

  3. Ping : Généralités sur la compilation séparée en C. « Aldian’s Blog

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s