La correcta macro preprocesador C no op.
Para el registro de depuración, a menudo he visto y usado algo como
#ifdef DEBUG
#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
#define DLOG(fmt, args...)
#endif
pero en varios lugares, he visto el segundo#define
Reemplazado con
#define DLOG(fmt, args...) do {} while (0)
En particular, hayesta respuesta, y el comentario sobreesta otra respuesta 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í mismo servirá como la declaración de no-op dentro del condicional.
Es uno u otro denada ydo {} while (0)
¿mejor? Si es así, ¿por qué? ¿Hay algo más que sea aún mejor?