what - Omisión de la función de llamada si no está definido
define max en c (3)
Tengo un programa que consta de diferentes módulos. Los módulos están interconectados mediante llamadas a funciones. Por ejemplo, State Init llama a la función init de cada módulo. Será posible deshabilitar los módulos (excluir de la compilación). La forma más fácil sería usar el preprocesador define. Pero esto genera una gran cantidad de código:
#IF MODULE_XXX_COMPILE
ret = module_func(...);
#ELSE
ret = 0;
#ENDIF
Me gustaría obtener una macro como esta:
ret = MOD_COMPILE_CALL(module_func(...));
Entonces, la macro comprueba si la definición es 1 si sí ejecuta las funciones, de lo contrario omite la ejecución y devuelve 0. El problema es que mi compilador me dice que no es posible usar #IF
en una macro. ¿Hay alguna forma de evitarlo?
Aquí hay un ejemplo para hacer lo que quiere:
#if MODULE_XXX_COMPILE == 1
#define MOD_COMPILE_CALL(x) (x)
#else
#define MOD_COMPILE_CALL(x) (0)
#endif
Si MODULE_XXX_COMPILE
se define como 1, MOD_COMPILE_CALL(module_func(...));
se expande a (module_func(...))
. De lo contrario, es solo 0
.
En lugar de usar #if
dentro de su macro, que probablemente no funcione, simplemente podría sacarlo:
#if MODULE_XXX_COMPILE == 1
#define MOD_COMPILE_CALL(fcall) (fcall)
#else
#define MOD_COMPILE_CALL(fcall) (0)
#endif
Si es posible.
Definir IF_MOD_XXX
:
#if MODULE_XXX_COMPILE
#define IF_MOD_XXX(mod_enabled, mod_disabled) mod_enabled
#else
#define IF_MOD_XXX(mod_enabled, mod_disabled) mod_disabled
#endif
Úselo:
int ret = IF_MOD_XXX(module_func(), 0);