Langage C: Directives du pré-compilateur
Un article de WikiTuto.
Explications
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 valeur
remplace 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éfinition :
permet 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 nom : comme #if mais vrai s'il y a eu auparavant un #define nom
#ifndef nom : vrai 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 */
Voir aussi
- Instructions
- Structures de contrôle
- Déclaration et stockage des variables
- Fonctions
- Variables scalaires
- Tableaux
- Structures et unions
- Directives du pré-compilateur
- Utiliser un compilateur (gcc ou Turbo C)
- Correction des exercices
Auteur :Patrick TRAU. Copyright : utilisation de ces documents libre pour tout usage personnel. Utilisation autorisée pour tout usage public non commercial, à condition de citer son auteur (Patrick TRAU, IPST, Université Louis Pasteur Strasbourg, email : Patrick.Trau (à) ipst-ulp.u-strasbg.fr ) et de me signaler tout usage intensif. Utilisation commerciale interdite sans accord écrit de ma part.



