The number of parameters to this function is variable
It has all types of variables, function calls, etc.
The code has thousands of these lines
There is now a need for a special version of the compile that will remove a lot of the code, among others is the logging.
Can I somehow #define the "logthis" name into something that'll remove all actual calls to the code. including the actual parameters/expressions to the call.
I can't afford to add #ifdef/#endif around each of the calls because there are too many of them, and because that'll cause some undisired side effects in our code conformance tests.
Code:
#define logthis __noop
comes close, that removes the call, but it still causes the compiler to evaluate and validate all the parameters to the logthis function, which doesn't work because in this case, removing the logging headers also removes other members of the class that get used as part of the parameters to logthis()
Ideal would be if I could define logthis into // resulting in all the rest of the line being comments, but that doesn't work. But it's basically something like that which I'm seeking.
Preferably I'd like something to be portable, but I'll take a solution that only works on visual studio as well.
Last edited by OReubens; September 7th, 2012 at 06:53 AM.
actually... I hadn't, for the simple fact, I didn't even know this existed. And I'm not alone, turns out of the whole programming team, nobody did, except for one guy that "claims" he did, but in several discussions, it never occured to him to use it like that.
So yeh, it really is as simple as:
Code:
#define logthis(...)
Now I'll go crawl in my shell of shame for the weekend.
It's just to accept, even though you're experienced sometimes the solution just refuses to come to mind. That's life..
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by
definition, not smart enough to debug it.
- Brian W. Kernighan
the function solution doesn't work, because of the variety of parameters used. In the case where I want to remove the call, all the types, classes, templates etc associated with the logging have (obviously) also been removed from the build, and a dummy function doesn't work in that case because the compiler can't evaluate the parameter expressions. So yes, it is exactly like the first case laserlight posted (and like I did in my OP), the function won't work because bar() is no longer defined in the "do not log" compilation.
Bookmarks