如果未定义则跳过函数调用

Skipping function call if not defined

我有一个由不同模块组成的程序。这些模块通过函数调用相互连接。例如。 State Init调用每个模块的init函数。应该可以禁用模块(从编译中排除)。最简单的方法是使用预处理器定义。但这会产生大量代码:

#IF MODULE_XXX_COMPILE
     ret = module_func(...);
#ELSE
     ret = 0;
#ENDIF

我想要这样的宏:

ret = MOD_COMPILE_CALL(module_func(...));

因此宏检查定义是否为 1,如果是,则执行函数,否则跳过执行,returns 0。 问题是我的编译器告诉我不能在宏中使用 #IF。有办法解决吗?

而不是在你的宏中使用 #if,这可能不起作用你可以直接把它去掉:

#if MODULE_XXX_COMPILE == 1
    #define MOD_COMPILE_CALL(fcall) (fcall)
#else
    #define MOD_COMPILE_CALL(fcall) (0)
#endif

这里是一个做你想做的事的例子:

#if MODULE_XXX_COMPILE == 1
    #define MOD_COMPILE_CALL(x) (x)
#else
    #define MOD_COMPILE_CALL(x) (0)
#endif

如果 MODULE_XXX_COMPILE 定义为 1,则 MOD_COMPILE_CALL(module_func(...)); 扩展为 (module_func(...))。否则,它只是 0.

是的,有可能。

定义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

使用它:

int ret = IF_MOD_XXX(module_func(), 0);