Le Prprocesseur - PowerPoint PPT Presentation

1 / 26
About This Presentation
Title:

Le Prprocesseur

Description:

Augmente la lisibilit du code source. Augmente la vitesse d'ex cution du programme ... Une directive au pr processeur commence toujours par # #include, ... – PowerPoint PPT presentation

Number of Views:69
Avg rating:3.0/5.0
Slides: 27
Provided by: Hom82
Category:

less

Transcript and Presenter's Notes

Title: Le Prprocesseur


1
Le Préprocesseur
2
Sujets abordés
  • Préprocesseur
  • Quest ce?
  • Quest ce quune directive?
  • Les macros
  • Les définir, les redéfinir, les dé-définir
  • Les macros à arguments
  • Directives ifdef et ifndef
  • Autres diectives

3
Le préprocesseur
  • Simple substitution de texte
  • Augmente la lisibilité du code source
  • Augmente la vitesse dexécution du programme
  • Favorise un débuggage heureux

4
Directives
  • Une directive au préprocesseur commence toujours
    par
  • include, define, ifdef
  • Les directives sont effectives sur tout le
    fichier.

5
Macros
  • Définies par la directive define
  • Deux formes
  • Simple remplacement dune chaîne de caractère.
  • Remplacement de la chaîne et substitution
    dargument.
  • Une macro peut être définie sur plusieurs lignes
    (retour chariot)

6
Macro simple
  • define IDENTIFIANT chaîne
  • chaîne est une séquence de caractères
  • Toute occurrence de IDENTIFIANT dans le texte
    sera remplacé par chaîne
  • Pas de remplacement dans entre

7
Macro simple (2)
  • Code original
  • define TAXE 0.7
  • ...
  • netbrut-(brutTAXE)
  • printf(TAXE\n)
  • Code intermédiare
  • ...
  • netbrut-(brut0.7)
  • printf(TAXE\n)

8
Macro avec arguments
  • define IDENTIFIANT(x,y) chaîne
  • Pas despace entre IDENTIFIANT et la parenthèse
  • x et y sont des arguments formels pour la macro
  • Code original
  • define READINT(I) scanf(d,I)
  • READINT(hours)
  • Code intermédiaire
  • scanf(d,hours)

9
Macros prédéfinies
  • Dans stdio.h
  • define getchar() getc(stdin)
  • define putchar(c) putc(c,stdout)

10
Macro à arguments multiples
  • Code original
  • define MIN(X,Y) ( (X)gt(Y) ? (X) (Y) )
  • .
  • MIN(a,b)
  • Code intermédiaire
  • .
  • ( (a) gt (b) ? (a) (b) )

11
Problèmes courants
  • Code original
  • define SQR(X) XX
  • SQR(a1)
  • Code intermédiaire
  • a1a1 //ce qui est égal à a(1a)1
  • Solution parenthèser
  • define SQR(X) (X)(X)

12
Les macros ne sont pas des fonctions
  • Code original
  • define SWAP(X?Y) int temp tempX XY
    Ytemp
  • void main(int)
  • int a3, b4
  • SWAP(a,b)
  • Code intermédiaire
  • void main(void)
  • int a3,b4
  • int temp tempa ab btemp

13
Macro prédéfinies
  • __FILE__ nom du fichier source courant
  • __LINE__ numéro de ligne courant
  • __DATE__ date de compilation du fichier courant
  • __TIME__ heure de compilation du fichier
    courant
  • printf(s a été compilé le s\n,__FILE__,__DAT
    E__)

14
Opérateurs de Macro
  • permet de convertir largument en chaîne de
    caractère
  • define MSG(F) printf(F)
  • MSG(test mess) //devient printf(test mess)
  • permet de concaténer
  • define ERR(X,Y) printf(X Y)
  • ERR(err ,une erreur) //devient
    printf(err une erreur)

15
Dédéfinir et redéfinir des macros
  • Il nest pas permis de redéfinir des macros, sauf
    si elles ont été dédéfinies par undef au
    préalable.
  • undef est ignoré si lidentifiant na pas été
    défini
  • undef peut dédéfinir des macro prédéfinies!!!!

16
Inclure des fichiers
  • On inclue des fichiers textes par include
  • Le texte du fichier est alors recopié à cet
    endroit.
  • include ?stdio.h? cherche dans le chemin
    standard le fichier stdio.h
  • include monFichier.h cherche le fichier
    monFichier.h dans le répertoire courant.

17
Conséquence des inclusions
include prog1.h Int main(void)
include ?stdio.h? typedef int p_int
prog1.h
prog1.c
Prog1.c pourra alors utiliser les fonctions de la
bibliothèque stdio.h
18
Compilation conditionnelle
  • Sélectionne des parties du code à omettre lors de
    la compilation si une condition est remplie.
  • Ces parties peuvent contenir des déclarations
    et/ou des actions
  • Qui sont spécifique à un matériel
  • Utiles au débuggage uniquement.

19
Compilation conditionnelle (2)
  • Utiliser les directives
  • ifdef, elif, else, endif
  • Les conditions de test
  • Sont des constantes entières
  • Evaluées comme Vrai/Faux
  • Peuvent contenir des opérateurs si ils sont
    évalués sur des constantes entières

20
Compilation conditionnelle (3)
  • include ?stdio.h?
  • define DEBUG 2
  • int main(void)
  • if DEBUG 2
  • printf(DEBUG est à 2\n)
  • else
  • printf(DEBUG nest pas à 2\n)
  • endif
  • return 0

21
Compilation conditionnelle (4)
  • Si on effectue gcc E fichier.c, on obtient le
    résultat de laction du préprocesseur
  • int main(void)
  • printf(DEBUG est à 2\n)
  • return 0

22
Compilation conditionnelle (5)
  • Aide au débuggage dun programme
  • On peut donner nimporte quel nom aux
    identifiants
  • Chaque directive if doit recevoir une directive
    endif

23
Définitions
  • Concerne les directives ifdef et ifndef
  • Utilisées pour déterminer si un symbole est connu
    du préprocesseur.
  • ifdef identifieur vérifie si identifieur a été
    défini
  • ifndef identifieur vérifie si il na pas été
    défini.

24
Combinons définitions et compilation
conditionnelle
  • Permet déviter de définir plusieurs fois le même
    identifiant ou symbole et de résoudre des
    conflits quand
  • Insertion multiple dun même fichier den-tête
  • Déclaration multiple dun identifiant
  • Redéfinition dun identifiant

25
Technique
  • Pour un fichier en-tête classic.h
  • ifndef CLASSIC.H
  • define CLASSIC.H
  • .
  • endif

26
Autre directives
  • error message
  • Emet une erreur de compilation avec pour message
    message si activée.
  • line numero_de_ligne nom_de_fichier
  • __LINE__ est réinitialisé à numero_de_ligne
  • __FILE__ est réinitialisé à nom_de_fichier
Write a Comment
User Comments (0)
About PowerShow.com