Bonjour à tous,

Je voudrais savoir s'il est possible de placer des paramètres variables dans une macro.

Je m'explique : je voudrais faire une librairie de journalisation dans laquelle en appelant la fonction logger_debug, on obtienne quelque chose du genre:
DEBUG 18/01/2008 - 15:22:32 - mainc.c:32 - Un message de debug
Comme vous le voyez, je voudrais le nom du fichier ainsi que le numéro de ligne où la fonction a été appelée.

J'ai donc fait une fonction ayant ce prototype:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
void logger_debug(LOGGER *logger, const char *source_file, const int line,
                  const char *format, ...);
Les variables source_file et int line sont toujours renseignées grace aux macros __FILE__ et __LINE__. Ce qui me donne donc dans mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
	logger_debug(logger, __FILE__, __LINE__, "%s", "Un message de debug");
	logger_debug(logger, __FILE__, __LINE__, "%s", "Un autre message de debug");
J'aurais voulu simplifier l'appel de la fonction en créant une macro, ce qui me permettrait d'écrire un truc du genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
LOG_DEBUG(logger, "%s", "Un message de debug")
Malheureusement, le problème est que le nombre de paramètres de la fonction est variable, et la macro définie ainsi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
#define LOG_DEBUG(logger, format, ...) logger_debug(logger, __FILE__, __LINE__, format, ...)
ne compile pas.

Comment puis-je résoudre ce problème?