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.
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
Re: Using macros with a logger
Quote:
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?
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.
Re: Using macros with a logger
Quote:
Originally Posted by
potatoCode
Hello Mybowlcut,
That's a very good question. I don't know what it would really expands to.
Fixed. ;)
Re: Using macros with a logger
Quote:
Originally Posted by
Mybowlcut
Fixed. ;)
:)
Re: Using macros with a logger
If anyone knows what this expands to, I'm curious to know.
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.
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.
Re: Using macros with a logger
Re: Using macros with a logger
Quote:
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__.