Macro to turn off printf statements

Not exactly what you ask for, but I use this construct in my code for debug output when I do not have a proper logging system handy:

#if 1
  #define SPAM(a) printf a
#else
  #define SPAM(a) (void)0
#endif

So I can do this all over my code

SPAM(("foo: %d\n", 42));

and then disable all of them by changing 1 to 0 in #if above.

But if you have variadic macro support in all compilers that you write code for, then you may go for other answers and just redefine printf. (That being said, I find it useful to distinct debugging prints from regular ones in code — using a different function name helps readability.)

Note that you also can redirect stdout to the /dev/null, but I assume that you want to get rid from runtime overhead as well.


Two options, either:

#define printf(...)

(requires C99 variadic macro parameters), you need to put it in some common header file which is never included before stdio.h, if there is one..

Or you can tell the linker to link it to something else, in GCC you would define

int wrap_printf(void) {return 0;}

and link using

--wrap printf

All that said, you should probably not be using printf for printing debug output, but rather a macro or utility function (which in turn can use printf if you'd like) which you have better control over.

Hope that helps.


#ifdef IGNORE_PRINTF
#define printf(fmt, ...) (0)
#endif

See also C #define macro for debug printing which discusses some important issues closely related to this.

Tags:

C