No puede utilizar las directivas de preprocesador de macros, pero si queremos comprobar si se ha definido SomethingElse
y llamar a una macro diferente, que podría lograr como este (requiere un preprocesador C99 y la biblioteca Boost.Preprocessor):
#define PP_CHECK_N(x, n, ...) n
#define PP_CHECK(...) PP_CHECK_N(__VA_ARGS__, 0,)
//If we define SomethingElse, it has to be define like this
#define SomethingElse ~, 1,
#define Something \
BOOST_PP_IF(PP_CHECK(SomethingElse), MACRO1, MACRO2)
Si SomethingElse
se define llamará MACRO1
, de lo contrario se llamará MACRO2
. Para que esto funcione, SomethingElse
tiene que definirse así:
#define SomethingElse ~, 1,
Por cierto, esto no funcionará en Visual Studio, debido a un error en su compilador, hay una solución aquí: http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement