Para el registro de depuración, he visto a menudo y se utiliza algo así comoadecuada C preprocesador macro no-op
#ifdef DEBUG
#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
#define DLOG(fmt, args...)
#endif
pero en un número de lugares, he visto la segunda #define
reemplazado con
#define DLOG(fmt, args...) do {} while (0)
En particular, está this answer, y el comentario en this other answer a la misma pregunta sugiere que el problema estaría en una situación como
if (condition)
DLOG("foo");
aunque mi prueba rápida sugiere que el punto y coma resultante en la línea por sí solo servirá como la declaración no-operativa dentro del condicional.
Es uno u otro de nada y do {} while (0)
mejor? Si es así, ¿por qué? ¿Hay algo más que sea aún mejor?
posible duplicado de [do {...} while (0) ¿para qué sirve?] (Http://stackoverflow.com/questions/257418/do-while-0-what-is-it-good -para) –