Can you #define a comment in C?

Viewed 23713

I'm trying to do a debug system but it seems not to work.

What I wanted to accomplish is something like this:

#ifndef DEBUG
    #define printd //
#else
    #define printd printf
#endif

Is there a way to do that? I have lots of debug messages and I won't like to do:

if (DEBUG)
    printf(...)

code

if (DEBUG)
    printf(...)

...
12 Answers

In C++17 I like to use constexpr for something like this

#ifndef NDEBUG
constexpr bool DEBUG = true;
#else
constexpr bool DEBUG = false;
#endif

Then you can do

if constexpr (DEBUG) /* debug code */

The caveats are that, unlike a preprocessor macro, you are limited in scope. You can neither declare variables in one debug conditional that are accessible from another, nor can they be used at outside function scopes.

You can take advantage of if. For example,

#ifdef debug
    #define printd printf
#else 
    #define printd if (false) printf
#endif

Compiler will remove these unreachable code if you set a optimization flag like -O2. This method also useful for std::cout.

Related