Enchaînements d'un programme

 

Avec Cobol, C++

Editeur de texte ® module source : texte compréhensible

® PREPROCESSEUR + en-têtes ® module source précompilé : lisible

® compilateur ® module objet binaire

® EDITEUR DE LIENS + bibliothèques ® exécutable

 

En-têtes : fichiers textes

En C++ : fichiers .h

 

Préprocesseur

·   n'existe pas toujours

·   quand il existe, il prépare le fichier pour le compilateur.

 

Avec Cobol, C++

Editeur de texte ® module source : texte compréhensible

® compilateur ® module objet : binaire

® EDITEUR DE LIENS + bibliothèques ® exécutable

 

Rq : le module objet dépend du SE Þ recompiler lors d'un chgt de SE

 

Bibliothèques = modules objets, binaire non lisible

      méthodes

      fonctions

      sur support disques par ex.

 

xlC, g++, cob = uitlitaires, avec préprocesseur, compilateur, éditeur de liens

 

Avec Java, Cobol

Editeur de texte ® module source : texte compréhensible

® PREPROCESSEUR + en-têtes ® module source précompilé : lisible

® compilateur ® code intermédiaire

® INTERPRETEUR + bibliothèques

 

Code intermédiaire

·        ni lisible, ni binaire

·        universel

·        transite sur le réseau

 

L'interpréteur

      analyse le code

      lance l'exécution ligne par ligne

 

Avec Kornshell

EDITEUR DE TEXTE ® module source

® INTERPRETEUR

 

Cmde : ksh prog

 

PREPROCESSEUR

 


module source                                    

                             PREPROCESSEUR module source

                                                            précompilé

en-têtes                                                 

 

 

·        logiciel spécifique

·        traite le fichier source

·        manipule des chaînes de caractères

·        élimine les commentaires

C++ : commencent par //

·        inclus les fichiers sources

C++ : les # include xxx.h sont remplacés par le code source

·        substitution de texte = macrogénérations de code

C++ : les # define xxx substituent les xxx

·        compilation conditionnelle

·        donne un module source précompilé

 

Directives préprocesseur

C++ : commencent par #

SQL : commencent par execsql

 

C++ : déclencher le préprocesseur

xlC –P nom-prog.C

 

Création d'une macro-instruction

#define nom-macro[(paramètres)] [texte-macro]

® remplace la chaîne nom-macro par la chaîne texte-macro

jusqu'à rencontrer

#undef nom-macro

 

Inclusion de fichiers en-têtes

#include <nom-fichier.h>

® fichier du répertoire standard

#include "nom-fichier.h"

® fichier du répertoire courant

 

Fichier en-tête

·        prototypes de fonctions

·        définition de types ( #define)

 

Rq : le code source des fichiers en-têtes en volumineux Þ en inclure le moins possible

 

Autres répertoires 

xlC –P –InomRép nom_fic_à_inclure –InomRép nom_fic_à_inclure

(-Include)

 

.h

en-tête

.i

précompilé

.o

module objet

 

COMPILATION CONDITIONNELLE

 

#ifdef constante     // #ifndef constante

   instructions…

#else

   instructions…

#endif

 

Le compilateur génère un fichier différent selon que les constantes sont définies ou pas

But : paramétrer le préprocesseur

xlC –P –DnomConstante nomProg

(-Define)

 

Utilité

compiler un même programme sur des machines difftes

contrôler les impressions intermédiaires

 

#define constante Þ #ifdef constante V


 


     précompilé                     COMPILATEUR                 module objet

 

 

construit un module objet à partir du source précompilé

analyse les instructions

   mot-clés

   ponctuation

   cohérence (var utilisée doit être déclarée)

 

Module objet

   = code machine correpondant au code source

·  En-tête

Header  = infos générales système sur lequel on a compilé

·  Code des instructions .txt

·  Infos sur les variables globales .bss

·  Chaînes et constantes 
   Ex : cout<<"Heure ?"; x=1;

·  Table des symboles relogeables

Relocation Table = liste de toutes les fonctions utilisées dans le prog

En clair :

 

déclaré

utilisé

code

f(char)

oui

instr n°43

oui

sin( )

oui

instr n°56

non

·  Table des symboles

= Symbol Table recense toutes les déclarations

En clair :

 

déclaré

type

utilisé

i

oui

entier

instr n°56

j

non

 

instr n°57

 

Compiler, arrêt après compilation

xlC –c nomProg.C

 

Aperçu module objet

dump nomModule.o

 

Rq : le module objet ne contient pas le code des fonctions des bibliothèsuqes std.


 


module(s) objet(s)

                               EDITEUR DE LIENS        exécutable

 


 bibliothèques                      

 

 

Bibliothèque = ens. de modules objets = code des fonctions std ou utilisateurs

 

L'éditeur de liens

·  fait des recoupements sur les tables de symboles relogeables des diffts modules objets (est-ce que le code de telle fonction est présent dans telle table alors qu'il est absent de telle table ?)

·  le code est contenu dans les bibliothèques

 

BIBLIOTHEQUES

= ens. de modules objets

 

libpath = var d'environnement

contient tous les noms des bibliothèques et les chemins d'accès

Path = chemin

lib pour library = bibliothèque

 

Nom d'une bibliothèque

libNomBibli.a

 

Créer une bibliothèque

Attn : il faut créer les modules objets correspondants

 

ar option NomBibli listeModObjets

Options :

[-d] delete [-q] ajout en fin [-r] replace [-t] liste [-v] compte-rendu des opés faites [-x] extraction des modules et recopie dans le cd