#ifdef's to configure different conditional compilations is very error prone.
I believe we've all had the case where something was compiled, while it shouldn't have been, due to accidentally creating/including a
#define of the same name or defining it to 0 while checking with
While I won't give you a solution to fix the flawed model of using the preprocessor for conditional inclusion, I'll give you a solution to make it less error prone:
#if USING(DEBUG) /* Do something in debug. */ #else /* Do something in production. */ #endif
USING macro requires each configuration macro to be explicitly defined to special
OFF values, or you'll get an error1.
By simply defining
USING to a mathematical expression and
OFF to be the operators, we'll get an error whenever an undefined or otherwise defined macro is tried to be used as an argument:
#define USING(x) ((1 x 1) == 2) #define ON + #define OFF -
Comments, criticism? Drop me a tweet @ArvidGerstmann.
Not entirely correct, but good enough for our case. ↩