partes de mi código dependen del valor de un símbolo de preprocesador:¿Hay manera de comprobar el tipo de un valor de símbolo de preprocesador en C/C++
int a()
{
#if SDK_VERSION >= 3
return 1;
#else
return 2;
#endif
}
La comparación depende del valor de SDK_VERSION. Se espera que sea un entero o algo que se compare con un entero, en este caso, 3. Si SDK_VERSION es algo que no se puede comparar con un entero, habrá un error de compilación.
¿Hay alguna forma de cancelar la compilación si SDK_VERSION no es del tipo esperado? Por ejemplo:
#if type(SDK_VERSION) != int # Does not compile, I know
#error "SDK_VERSION must be an integer."
#endif
El mensaje de error sería un poco más oscuro, pero poner algo como 'int ___SDK_VERSION_SHOULD_BE_CONVERTIBLE_TO_INT___ = SDK_VERSION;' en el encabezado que incluye 'SDK' podría resolver su problema. –
Usted dice que ya obtiene un error de compilación si 'SDK_VERSION' es del tipo incorrecto, ¿es lo que quiere un mensaje de error más agradable/diferente? – spatz
@ FrédéricHamidi: Ignorando los problemas asociados con el doble guión bajo en sus identificadores. –