Duplicar posible:
Can I redefine a C++ macro then define it back?preprocesador Preservar definiciones
Decir que tengo un código que utiliza el nombre BLAH
para una variable. Supongamos que BLAH
es una definición de preprocesador común en muchos archivos de encabezado estándar (definido como 10), por lo que si mi archivo se incluye después de cualquiera de ellos, el código se rompe porque BLAH
se transforma en 10; por lo tanto, debo #undef BLAH
. Pero también otros encabezados pueden depender de BLAH
, entonces debo restaurar BLAH
a su valor original después de que mi encabezado esté listo. ¿Es posible hacer algo como esto:
#ifdef BLAH
#define BLAH_OLD BLAH
#undef BLAH
#endif
... code ...
// restore BLAH to 10
#ifdef BLAH_OLD
#define BLAH BLAH_OLD
#end
? Esto no funciona, por supuesto, porque bla no se amplía a 10. He intentado hacer algo como
#define EXPAND_AGAIN(x) x
#define EXPAND(x) EXPAND_AGAIN(x)
#define BLAH_OLD EXPAND(BLAH)
pero que no funciona bien, ya que EXPAND se toma literalmente, y no expandida. Estoy usando MSVC 2008/2010, pero sería encantador si la solución funcionara en la mayoría de los otros compiladores también.
¿ha considerado el cambio de su denominación variable? –
Cambia el nombre de tu variable; terrible convención que tienes pasando allí si esto es un problema. ¿Y qué tal en lugar de "digamos" usted dice "aquí está el problema real que estoy tratando de resolver". – GManNickG
Usted se da cuenta de que ha sido una convención desde casi el principio de los tiempos que los identificadores que son todos los límites están reservados para el uso del pre-procesador (para evitar cosas como esta). –