#directive
xlC –P fic.C Þ
![]()
![]()
![]()
![]()
fic.C PREPRO fic.i
fic.i
les directives (#) ont été gérées (substitution de texte)
texte lisible
Compiler
xlC –C fic.C
Compiler + éditer les liens
xlC –o nomExé
fic.C
#include <fic.h>
Þ recherche dans le
répertoire std
Lancer le préprocesseur avec
un autre répertoire de recherche
xlC –P –InomRép fic.C
En général :
#include "adresse
du fichier à inclure"
../ Þ remonte d'un répertoire
xlC –P –DnomCte fic.C
rend vrai #define
nomCte
Attn, pour éviter les inclusions multiples :
systématiquement encadrer les fichier en-tête (.h)
#ifndef _H_FIC
#define _H_FIC
…
#endif
Attn aux parenthèses dans
#define carre(x) (x)*(x)
Attn : les macros ne sont pas des fonctions
|
|
macrogénérations de code |
fonctions (inline) |
|
gestion niveau |
préprocesseur |
compilateur |
|
influence sur le calcul |
non : substitution de texte |
oui : un type est retourné |
Attn aux #include "truc.h" :
le
fichier doit être dans le répertoire courant
ou
bien mettre le chemin
ou
bien préciser à la commande –IrépertoireOùChercher
-P Û passage préprocesseur
aucun contrôle
substition de texte uniquement
Erreurs
grandeurs non définies (pas de #define)
.h inconnus (adresse incorecte ou pas dans le répertoire courant)
.i Û module précompilé
#define CTE
les ctes st remplacées
#include <"fic.h>"
remplacées par le contenu du
fic.h i.e. prototypes de fonctions
compilateur : contrôle
.h = fichiers en-têtes
contient que les prototypes, pas les défnitions de fonctions (® modules objets reliés à l'édition des liens)
Compression et archivage
Archivage = mise ensemble de documents
Compression = réduction de la taille mémoire des données par
l'exécution d'un algo de compression
tar –cvf
fic.tar liste_truc_à_mettre
c= create
tar –xvf
fic.tar
x = extract
gzip fic.tar
gzip –d
fic.tar
d = decompress
xlC –o nomExé
liste_prog.C
Þ crée l'exé à partir de +s sources
xlC -c
liste_prog.C
Þ crée le module objet
(.o) correspondant pour chacun des .C
xlC -o nomExé
liste_modules.o
Pour les problèmes de
déclarations, mieux vaut corriger le principal que les fonctions : le module
objet (code) de la fonction peut servir à +s endroits
ar –q chemin/libbib.a liste_modules.o
Þ crée bib, bibliothèque
contenant les modules objets
ar –t
chemin/libbib.a
Þ donne les modules objets
contenus dans bib
ar –q chemin/libbib.a module_à_rajouter.o
Þ rajoute le module à la
bibli bib
xlC –o
nomExé prog.C –Lchemin –lbib
Þ crée l'exé avec la bibli
bib
$HOME Û home
directory
../ Û remonte d'un répertoire
. Û ici
Appel fonction f(x,y) (compilateur : ¬)
pile LIFO ¬ y
pile LIFO ¬ x
pile LIFO ¬ espace réservé pour le résultat final (type considéré)
pile
LIFO ¬ adr de retour
lecture de la pile pour x et y
pile (case réservée) ¬ résultat (type pris en compte)
cpt ordinal ¬ adr retour (pile)
Avantage : le résultat
n'a pas de taille limitée (en dehors que par le type)
Fonctions
récursives : grandes piles mais
taille limitée Þ pb