如果未定义则跳过函数调用
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);
我有一个由不同模块组成的程序。这些模块通过函数调用相互连接。例如。 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);