Dla rejestrowania debugowania, mam często postrzegane i wykorzystywane coś podobnegoWłaściwa C preprocesora makro no-op
#ifdef DEBUG
#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
#define DLOG(fmt, args...)
#endif
ale w wielu miejscach, widziałem drugi #define
zastąpione
#define DLOG(fmt, args...) do {} while (0)
W szczególności istnieje this answer, a komentarz na temat this other answer dla tego samego pytania sugeruje, że problem byłby w sytuacji takiej, jak:
if (condition)
DLOG("foo");
chociaż mój szybki test sugeruje, że wynikowy średnik na linii sam w sobie będzie służył jako instrukcja no-op wewnątrz warunkowego.
Czy jedno lub drugie z nic nie jest lepsze niż i do {} while (0)
? Jeśli tak, dlaczego? Czy jest coś jeszcze lepszego?
możliwy duplikat [do {...} gdy (0) do czego służy?] (Http://stackoverflow.com/questions/257418/do-while-0-what-is-it-good -dla) –