Hello everyone.
I'm using a simple macro to comment out part of my code in release build, but i'm wondering if this could lead to some sort of problem, as i'm trying to cheat the precompiller into adding comments against the rule.
I use this to avoid writing duplicated code.
Basically, here is the macro
#if defined DEBUG
#define MACRO
#else
#define MACRO );/ ## /
#endif
What it does is: If i'm in debug build, it does nothing. If i'm in release build, it close a function and comment the rest of the line.
The "/ ## /" part is needed to trick the compiler into thinking comment dont exist. But they do.
This is how i use the macro. (The code is simplified)
//Initialize a long list of interfaced classes into a map, allowing easy Factory access.
void Bar()
{
//Assume each different letters is an interfaced class
Foo(A0, A1 MACRO, A2, A3, A4);
Foo(B0, B1 MACRO, B2, B3, B4);
// Many Foo later...
Foo(Z0, Z1 MACRO, Z2, Z3, Z4);
}
#if defined DEBUG
//Types don't really matter. Just the number of parameters is interesting.
void Foo(Type0, Type1, Type2, Type3, Type4)
{
// Do something, in debug
}
#else
void Foo(Type0, Type1)
{
// Do something, in release
}
#endif
As you can see, in release build, the compiler will see "Foo(A0, A1 );" as the comment will clear the rest of the line.
This way, i avoid writing this code:
#if defined DEBUG
Foo(A0, A1, A2, A3, A4);
Foo(B0, B1, B2, B3, B4);
// Many Foo later...
Foo(Z0, Z1, Z2, Z3, Z4);
#else
Foo(A0, A1);
Foo(B0, B1);
// Many Foo later...
Foo(Z0, Z1);
#endif
The reason i use it is to avoir writing duplicate code to avoid possible Copy/Paste errors.
As of writing this post, the macro work fine in either build, but i have this strange feeling i'm doing something cringe-worthy.
Am i really going overboard just to avoid writing duplicated code?
If so, is there other options?