fonction wrapper printf qui filtre selon les préférences de l'utilisateur
Vous voulez appeler vprintf() au lieu de printf() en utilisant les capacités des arguments variables "varargs" de C.
#include <stdarg.h>
int write_log(int priority, const char *format, ...)
{
va_list args;
va_start(args, format);
if(priority & PRIO_LOG)
vprintf(format, args);
va_end(args);
}
Pour plus d'informations, voir quelque chose dans ce sens.
Je pense que l'idée de Jeff est la voie à suivre, mais vous pouvez également accomplir cela avec une macro sans utiliser vprintf. Cela peut nécessiter gcc :
#define write_log(priority,format,args...) \
if (priority & PRIO_LOG) { \
printf(format, ## args); \
}
Vérifiez ici pour plus d'informations sur la façon dont cela fonctionne.
Si vous voulez que les définitions PRIO_* soient utilisées comme bit (en utilisant | et &), vous devez donner à chacune d'elles son propre bit :
unsigned short PRIO_HIGH = 0x0001;
unsigned short PRIO_NORMAL = 0x0002;
unsigned short PRIO_LOW = 0x0004;
La macro peut être améliorée en utilisant la notation do { } while (0). Cela fait que les appels à write_log agissent plus comme une instruction.
#define write_log(priority,format,args...) do { \
if (priority & PRIO_LOG) { \
printf(format, ## args); \
} while(0)