Proper C preprocessor macro no-op
c, c-preprocessor, macros
Solution
See C #define macro for debug printing for an explanation of why you want a different form of no-op. You want to have the compiler parse the debug printing code even when you aren't using it so that errors do not creep in.
Problem
For debug logging, I have often seen and used something like ``` #ifdef DEBUG #define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args) #else #define DLOG(fmt, args...) #endif ``` but in a number of places, I have seen the second `#define` replaced with ``` #define DLOG(fmt, args...) do {} while (0) ``` In particular, there's this answer, and the comment on this other answer to the same question suggests that the problem would be in a situation like ``` if (condition) DLOG("foo"); ``` though my quick test suggests that the resulting semicolon on the line by itself will serve as the no-op statement inside the conditional. Is one or the other of nothing and `do {} while (0)` better? If so, why? Is there something else that's even better?