Possible Duplicate:
Can I redefine a C++ macro then define it back?
Say I have some code that uses the name BLAH
for a variable. Suppose BLAH
is a common preprocessor definition in many standard header files (defined as 10), so if my file is included after any of them, the code breaks because BLAH
is transformed into 10; therefore, I must #undef BLAH
. But also other headers may depend on BLAH
, so I must restore BLAH
to it's original value after my header is done. Is it possible to do something like this:
#ifdef BLAH
#define BLAH_OLD BLAH
#undef BLAH
#endif
... code ...
// restore BLAH to 10
#ifdef BLAH_OLD
#define BLAH BLAH_OLD
#end
? This doesn't work of course, because BLAH is not expanded to 10. I have tried doing something like
#define EXPAND_AGAIN(x) x
#define EXPAND(x) EXPAND_AGAIN(x)
#define BLAH_OLD EXPAND(BLAH)
but that doesn't work either, since EXPAND is taken literally and not expanded. I am using MSVC 2008/2010, but it would be lovely if the solution would work on most other compilers too.
Yes, given that your compiler supports the push/pop macro directives (visual c++, gcc, llvm all do):
#define BLAH 10
#pragma push_macro("BLAH")
#undef BLAH
#define BLAH 5
...
#pragma pop_macro("BLAH")