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:
1 2 3 4
|
#if defined(UNE_MACRO)
/*...un bout de code ...*/
#endif |
On peut alors définir UNE_MACRO à la compilation:
gcc -DUNE_MACRO -c -o monfichier.o monfichier.c
Et là c'est une horreur de suivre le chemin d'exécution du code, lorsque la taille du projet devient importante.
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:
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;
} |
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é.
Meilleures salutations et merci pour tout
Thierry
Partager