#define #ifdef #ifndef #else #endif sont des
directives du préprocesseur.
Le préprocesseur est un programme qui est appelé avant le compilateur proprement dit (théoriquement, car certains compilateurs entrelacent la précompilation avec la compilation) et qui rend en sortie LE fichier qui sera compilé. Le préprocesseur effectue principalement ces opérations, à partir du fichier source vers LE fichier qui sera envoyé au compilateur :
- bien évidemment, recopier le fichier source, sauf les lignes situées entre un
#ifdef ou un
#ifndef dont la condition serait fausse et le
#else ou le
#endif correspondant ;
- remplacer les constantes (ce qu'on déclare avec
#define) par leurs valeurs, aux endroits où elles sont utilisées dans le source ;
- recopier tel quel le contenu des fichiers inclus avec
#include à l'endroit même de cette directive.
Pour que le préprocesseur ignore certaines lignes, il faut donc placer celles-ci entre un
#ifdef ou un
#ifndef dont la condition est fausse et un
#else ou un
#endif.
#ifdef signifie "si cette constante est définie, copie ce qui suit, sinon ignore tout jusqu'au
#endif ou
#else correspondant"
#ifndef signifie "si cette constante n'est pas définie, copie ce qui suit, sinon ignore tout jusqu'au
#endif ou
#else correspondant"
Par exemple, dans ce code tout va être compilé :
#define PROUT
void _main(void)
{
instruction 1
#ifdef PROUT
instruction 2
instruction 3
#endif
instruction 4
}
Mais dans celui-ci, seules les instructions 1 et 4 vont être compilées :
//#define PROUT
void _main(void)
{
instruction 1
#ifdef PROUT
instruction 2
instruction 3
#endif
instruction 4
}