précédentsuivanthautContentsIndex

Directives du pré-compilateur

Attention, les directives se terminent par le retour à la ligne et pas un ";".

#include <nomfic> permet d'insérer à cet endroit un fichier, qui serra cherché dans le répertoire correspondant à la bibliothèque du C (sur PC dans \TC\INCLUDE)

#include "nomfic" permet d'insérer à cet endroit un fichier, comme s'il était écrit ici, en le cherchant dans le répertoire actuel (le votre)

#define nom valeurremplace chaque occurrence du nom par la valeur. On ne peut prendre en compte qu'une ligne (le retour à la ligne terminant la définition). En C on a l'habitude de noter les constantes numériques en majuscules.

 exemple :

#define PI 3.1415926
#define begin {
#define end }
#define macro(parametres) définitionpermet la définition d'une macro, les paramètres seront substitués lors de la réécriture. Il ne faut pas de blanc entre le nom de la macro et la "(" pour différencier d'un define simple.

#define double(a) a*2
remplacera double (i+5) par i+5*2. Il faut donc utiliser des parenthèses, même si elles semblent inutiles :
#define double(a) (a)*2

 autre exemple:
#define max(x,y) x>y?x:y
replacera max(a,max(b,c)) par a>b>c?b:c?a:b>c?b:c

#define max(x,y) (((x)>(y)?(x):(y)
replacera max(a,max(b,c)) par (((a)>( (((b)>(c))?(b):(c)) )) ? (a) : (((( b)>(c)) ? (b) : (c))) ce qui donne des parenthèses superflues mais le résultat escompté.

 Une macro ressemble à une fonction, mais sera d'exécution plus rapide : le texte est directement inséré à l'endroit voulu, mais pas de gestion de pile.

#undef nom annule le précédent #define nom ...

#if (expression)les lignes qui suivent ne seront lues (et compilées que si l'expression est vraie

#endif : fin de portée du #if précédent

#else : possible mais optionnel, faire attention en cas de #if imbriqués

#ifdef nomcomme #if mais vrai s'il y a eu auparavant un #define nom

#ifndef nomvrai si variable non définie

 exemples:

#ifndef entier
  #define entier int
  /* si une autre bibliothèque incluse plus haut l'a
  déjà défini, on ne le redéfinit plus */
#endif
#ifdef biblio_graphique
  initialise_ecran();
  efface_ecran();
  trace(dessin);
#else
  puts("si on avait eu un écran graphique j'aurai fait un dessin");
#endif
/* biblio_graphique peut être défini dans un "header" 
   (fichier.h) inclus ou non plus haut */

précédentsuivanthautContentsIndex