Directives de compilation : #if

  • La directive #if permet de ne pas prendre en compte certaines lignes du programme source lors de la compilation.

  • On peut par exemple s'en servir pour mettre en place la création de traces d'exécution en affichant le contenu des variables utilisées et ainsi vérifier la bonne exécution du programme.

  • Pour supprimer la trace il suffit ensuite de donner la valeur faux à la constante testée par le #if.

DéfinitionSyntaxe

1
#if CONSTANTE
2
...
3
#else
4
....
5
#endif
  • #if : indique le début de la partie du programme source affectée par cette directive et teste la valeur vraie ou fausse de la constante CONSTANTE.

  • CONSTANTE est une constante définie par la directive #define

  • #else : n'est pas obligatoire et propose une autre action à entreprendre dans le cas où CONSTANTE est fausse.

  • #endif : termine la partie du programme source affectée par cette directive ouverte par #if

Exemple

1
#define TRACE 1
2
......
3
#if TRACE
4
printf("la variable nom contient : %s\n",nom);
5
#endif
  • Lors de la compilation si TRACE a la valeur vraie, le printf sera pris en compte et sera affiché lors de l'exécution.

  • Pour supprimer cet affichage, il faut donner la valeur fausse à TRACE (#define TRACE 0).

Variante : #ifndef

Il existe une instruction #ifndef qui permet de tester l'existence d'une constante. Par exemple :

1
#ifndef CONSTANTES_H
2
//Si la constante CONSTANTES_H a déjà été définie, ce qui suit ne sera pas compilé.
3
#define CONSTANTES_H 
4
5
#define PORT_LED 3
6
7
#endif /* CONSTANTES_H */

On utilise cette structure dans les fichiers d'entête pour éviter qu'ils ne soient chargés plusieurs fois. Ainsi, si un fichier d'entête est chargé une première fois, la constante se trouve alors définie. Il le fichier est chargé une seconde fois, la constante étant déjà définie, le contenu du fichier ne sera pas chargé.