-
February 1st, 2009, 12:36 AM
#1
Using macros with a logger
Hey.
I want to do this:
Code:
void f()
{
LOG("Called f().");
}
But I only want the LOG macro to work if USE_LOG is defined... in other words, if USE_LOG isn't defined, the LOG macro won't do anything. I'm trying to write the macro for this but I can't get it right:
Code:
#ifndef LOG(string)
#define LOG(string)
#ifdef USE_LOG
Logger::Get().Log(string)
#endif
#endif
This gives me a warning:
Code:
warning C4067: unexpected tokens following preprocessor directive - expected a newline c:\...\logger.h
Also I'm just not sure if it will do what I think it will do... if USE_LOG isn't defined and the call "disappears" everywhere it is used in code, will it leave behind semicolons everywhere? If so, is this a bad thing? Will the compiler interpret these as statements and spend time processing them?
Cheers.
-
February 1st, 2009, 12:59 AM
#2
Re: Using macros with a logger
It's simply:
Code:
#ifdef USE_LOG
#define LOG(string) Logger::Get().Log(string)
#else
#define LOG(string)
#endif
-
February 1st, 2009, 03:05 AM
#3
Re: Using macros with a logger
Originally Posted by Plasmator
It's simply:
Code:
#ifdef USE_LOG
#define LOG(string) Logger::Get().Log(string)
#else
#define LOG(string)
#endif
Cheers.
For the else case, what would that expand to?
-
February 1st, 2009, 03:58 AM
#4
Re: Using macros with a logger
Hello MyBowlCut,
That's a very good question.
I know just a little to say that parameterized macro expands its argument as text,
which in C++ could be anything from a number to invalid expression depending on where it's used. But then again, I don't know what it would really expands to.
-
February 1st, 2009, 04:01 AM
#5
Re: Using macros with a logger
Originally Posted by potatoCode
Hello Mybowlcut,
That's a very good question. I don't know what it would really expands to.
Fixed.
-
February 1st, 2009, 04:06 AM
#6
Re: Using macros with a logger
Originally Posted by Mybowlcut
Fixed.
-
February 1st, 2009, 04:12 AM
#7
Re: Using macros with a logger
If anyone knows what this expands to, I'm curious to know.
-
February 1st, 2009, 05:39 AM
#8
Re: Using macros with a logger
Quite simple: The preprocessor will replace ``LOG("Called f().")´´ with an empty string, thus your code will look like: to the compiler. The single semicolon will not translate to any code on compilation.
More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity. --W.A.Wulf
Premature optimization is the root of all evil --Donald E. Knuth
Please read Information on posting before posting, especially the info on using [code] tags.
-
February 1st, 2009, 05:42 AM
#9
Re: Using macros with a logger
Oh, and btw, you might want to lookup the __func__ macro which will automatically expand to the function name.
More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity. --W.A.Wulf
Premature optimization is the root of all evil --Donald E. Knuth
Please read Information on posting before posting, especially the info on using [code] tags.
-
February 1st, 2009, 06:43 AM
#10
Re: Using macros with a logger
-
February 1st, 2009, 09:31 AM
#11
Re: Using macros with a logger
Originally Posted by treuss
Oh, and btw, you might want to lookup the __func__ macro which will automatically expand to the function name.
Note though that __func__ is not a standard macro, so it may vary depending on platform. In MSVC it is __FUNCTION__.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|