with what va_args macro ejemplo define c macros c-preprocessor

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);