Bonjour,
Je planche actuellement sur un petit problème.
Si une macro définie une autre macro le préprocesseur la remplace.
#define _MACRO_1_ hello
#define _MACRO_2_ _MACRO_1_
_MACRO_2_
Alors gcc -E renvoie entre autre hello.
Là je pense avoir pigé.
Si je ne me trompe pas, j'ai vérifié sur la doc de gcc, le prépocesseur parse le code temps qu'il y a des macros et les remplace par leurs valeurs.
Maintenant, j'essai de définir des conditions dans un header :
#define _IFNDEF_#ifndef
#define _DEFINE_ #define
#define _ENDIF_ endif
#define _SURVEY_(name) _IFNDEF_ _##name##_SURVEY_ \
_DEFINE_ _##name##_SURVEY_ \
_ENDIF_
Dans un autre header je fais :
_SURVEY_(NODE)
Lorsque je fais gcc -E j'ai :
#ifndef _NODE_SURVEY_#define _NODE_SURVEY_ #endif
C'est bien ce que je voudrai qu'il fasse sauf qu'il ne le fais pas en entier.
Si je compile le fichier en .c s'y rattachant j'ai :
Error : stray # in program
Si je remplace _IFNDEF_ par #ifndef gcc -E me renvoie l'erreur:
# is not followed by a macroparameter
Ce que je fais ici est un peu bizarre.
Alors j'explique l'objectif.
J'écrit un module de surveillance active de bugs et de run pour d'autres petits modules.
Ce module doit permettre d'écrire ce qui se passe dans d'autre modules dans des fichiers choisis.
Mais, je veux pas me taper la définition dans tous les fichiers du type:
#ifndef _NODE_ERRORS_
#define _NODE_ERRORS_
#ifndef _NODE_ERRORS_OUTPUT_
#define _NODE_ERRORS_OUTPUT_ stderr
#endif
#define NODE_ERRORS(x)
#else
#define NODE_ERRORS(x) (fprintf(_NODE_ERRORS_OUTPUT_, "%s in %s line %s\n", x, __FILE__, __LINE__))
#endif
L'appel à <module>_ERRORS(explication de l'erreur) dans chaque module permettrai de suivre son fonctionnement et de surveiller leur activité pour des versions alpha par des tiers.
De tels fichiers pourrai ensuite m'être envoyé afin que je détecte où sont les erreurs et où elles se produisent.
Ce que je veux c'est que chaque module puisse sortir ses erreurs sur des flots différents afin de cloisonner les erreurs.
Merci de ne pas parler des exceptions ni l'étude du contexte de pile à la setjmp, ce n'est pas du tout le sujet de ce post.
Je cherche juste à savoir et à comprendre comment et pourquoi les définitions récursives de macros ne marchent pas dans mon cas ou en général.
Si vous avez des idées, je vous remercie d'avance pour vos réponses.
Surtout si ce n'est pas une bonne manière de faire ne vous gênez pas je suis là pour apprendre.
Partager