<p>I have the following preprocessor divective:</p>

<pre><code>#ifndef NDEBUG
#define TRACE printf
#else
#define TRACE(...)
#endif
</code></pre>

<p>and example of usage is:</p>

<pre><code>TRACE("TRACE: some parameter = %i\n", param);
</code></pre>

<p>In C all works perfectly well when I build both debug and release versions, but in C++ compiler emits the following:</p>

<p>warning: invalid character in macro parameter name</p>

<p>error: badly punctuated parameter list in `#define'</p>

<p>and points these warning and error to the 'TRACE(...)' directive.</p>

<p>How to write this in C++ correctly?</p>

You could do:
```
```
inline void TRACE(...) {}
```
```