我的代码可以使用define宏进行配置。为了获得代码中的值,我这样做:
#ifdef CONFIG_X
static constexpr bool x = true;
#else
static constexpr bool x = false;
#endif
但是在具有多个配置变量的代码中,这很快变得非常难看......
我发现的另一个解决方案就是将代码分成两部分:
#ifdef CONFIG_X
#define CONFIG_X_BOOL true
#else
#define CONFIG_X_BOOL false
#endif
static constexpr bool x = CONFIG_X_BOOL;
这有点好,但也不是很好。
如果定义了一个宏,是否有一个很好的方法来获得布尔值或1或0?
答案 0 :(得分:1)
这是可能的,但仅限于您正在寻找空定义的有限情况(通常是编译标志的情况)或您知道定义标志的方式的范围,例如0或1。
这是工作代码:
MY_DEFINE = 1
MY_DEFINE2 = 0
此代码将生成输出:
#define DETECT_EXIST_TRUE1 ~,1
因为第一个确实存在而第二个不存在。
如果将宏设置为1等值,则只需要使用备用版本的DETECT_EXIST_TRUE来处理它,并在末尾粘贴宏值。例如:
#define MY_DEFINE1 1
然后,如果你有:
std::cout << "MY_DEFINE1 = " << DETECT_EXIST(MY_DEFINE1) << std::endl;
这样的代码也可以在main中正常工作:
{{1}}
答案 1 :(得分:1)
#ifndef CONFIG_X
#error "Written for config x"
#endif
// True for config x, hack this about for other configurations
static bool x = 1;
现在,如果配置不是x,它会中断。一般来说,这比试图猜测非X的未命名配置需要更好。