Per la registrazione di debug, ho spesso visto e utilizzato qualcosa comecorretta C preprocessore macro no-op
#ifdef DEBUG
#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
#define DLOG(fmt, args...)
#endif
ma in un certo numero di posti, ho visto il secondo #define
sostituito con
#define DLOG(fmt, args...) do {} while (0)
In particolare, c'è this answer e il commento su this other answer alla stessa domanda suggerisce che il problema sarebbe in una situazione come
if (condition)
DLOG("foo");
sebbene il mio test rapido suggerisca che il punto e virgola risultante sulla linea da solo servirà da dichiarazione non operativa all'interno del condizionale.
L'uno o l'altro di non c'è niente di meglio e do {} while (0)
? Se è così, perché? C'è qualcos'altro che è ancora meglio?
possibile duplicato di [do {...} while (0) a cosa serve?] (Http://stackoverflow.com/questions/257418/do-while-0-quante-è-it-buono -per) –