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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta