#define PDEBUG(level, fmt,...) if (DEBUG_LEVEL>=level)
printf(fmt,##__VA_ARGS__);
e se uso PDEBUG(2,"ciao\n") il compilatore mi dà il warning
warning: ISO C99 requires rest arguments to be used
come posso correggere la macro?
Puoi fare cosi':
#define PDEBUG(level,...) if (DEBUG_LEVEL>=level) printf(__VA_ARGS__);
Magari puoi anche togliere l'if, giusto per evitare cose di questo tipo:
if (z>y)
PDEBUG(1,"ERRORE!!\n");
else
printf("OK\n"); /* se z>y && DEBUG_LEVEL < level !!! */
Non mi fa impazzire ma questa è un'altra possibilità:
#define PDEBUG(level,...) (DEBUG_LEVEL>=level ? printf(__VA_ARGS__):\
printf(""))
In generale io ho lasciato perdere l'idea dei messaggi di debug "a
livelli" e uso qualcosa di simile a questo:
#ifdef DEBUG
#define DBGMSG(m) printf m
#else
#define DBGMSG(m)
#endif
#define XDBGMSG(m)
da usare cosi':
DBGMSG(("Error %d @ %d:%d\n",errcode,line,col));
Funziona anche con compilatori non C99 (da notare le doppie parentesi).
Quando voglio disabilitare un messaggio ma non voglio cancellare tutta
la riga, mi basta mettere una X davanti et voilà.
R.D.