title: Function-like C macro without parentheses
body: <p>I have encountered the following debug macro in an embedded device codebase:</p>
  
  <pre><code>extern void DebugPrint(uint8_t *s);
  
  #define DEBUG_MSG(x)   do { PRINT_CURRENT_TIME; \
                              DebugPrint x ; } while(0)
  </code></pre>
  
  <p>Since there are no parentheses around <code>x</code> in the macro body (at the <code>DebugPrint x</code> part), all calls to this macro (all over the codebase) add another set of parentheses around strings:</p>
  
  <pre><code>DEBUG_MSG(("some debug text"));
  </code></pre>
  
  <p>Is there any reason to do this? Does it simplify optimizing away these calls in release builds, or something like that? Or is it just plain nonsense?</p>
  
  <p>I thought perhaps there would be additional overloads of <code>DebugPrint</code> with more arguments, but there are none.</p>