Bonjour à tous,
Je viens ici avec un sujet un peu général, au sujet duquel votre avis m'intéresse. J'ai lu dans un post sur le groupe usenet comp.lang.c qu'il fallait le plus possible limiter l'utilisation du préprocesseur C. Qu'en pensez-vous?
Je pense que le problème majeur vient de la lisibilité du code, car on peut écrire:
On peut alors définir UNE_MACRO à la compilation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #if defined(UNE_MACRO) /*...un bout de code ...*/ #endif
Et là c'est une horreur de suivre le chemin d'exécution du code, lorsque la taille du projet devient importante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part gcc -DUNE_MACRO -c -o monfichier.o monfichier.c
En revanche, pour toute macro définie dans un fichier d'entête, je ne vois pas (avec mes yeux de débutant) pourquoi l'usage du préprocesseur ne serait-elle pas conseillée:
Suivre l'exécution de ce code ne pose pas de problème particulier, comme d'ailleur l'utilisation de MACRO définies dans la bibliothèque standard. Où est donc le problème avec le préprocesseur? J'attend vos commentaires et retour d'expérience avec beaucoup d'intérêt. Faut-il préférer l'utilisation de fonction inline (C99) plutôt que l'usage de macros? Beaucoup de programmeurs hésitent encore à utiliser C99 pour des questions de portabilité.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 /* entete.h */ #ifndef H_TC_ENTETE_20061109111233 #define H_TC_ENTETE_20061109111233 #define UNE_MACRO #endif /* guard */ /* main.c*/ #include <stdio.h> #include <stdlib.h> #include "entete.h" int main(void) { #ifdef UNE_MACRO printf("SUper, UNE_MACRO est définie!\n"); #endif #ifndef UNE_AUTRE_MACRO printf("Eh oui, UNE_AUTRE_MACRO n'est pas définie!\n"); #endif return EXIT_SUCCESS; }
Meilleures salutations et merci pour tout
Thierry
Partager