Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

warning: ISO C99 requires rest arguments to be used

117 views
Skip to first unread message

Ottavio Campana

unread,
Jul 14, 2008, 10:00:41 AM7/14/08
to
Ciao, ho la seguente macro:

#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?

Remo D.

unread,
Jul 14, 2008, 11:10:23 AM7/14/08
to
Ottavio Campana ha scritto:


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.

0 new messages