Ebo*_*ers 1 c++ c-preprocessor
据我了解,您可以通过#define以下两种方式之一使用 C 预处理器:
#define SOME_VAL 3.4159f#define SOME_FLAG我正在编写一个库,我正在使用 #defines 来让用户解析设置以进行编译。我的问题是我需要知道使用了上述两种情况中的哪一种。
示例:
#define DISABLE_FEATURE或#define DISABLE_FEATURE false。
有没有办法让我区分这两者,还是必须在文档中指定要使用的?
我是否必须在文档中指定要使用的内容?
技术上不,你没有。但你应该。
您可以通过执行以下操作轻松标准化检查 false:
#ifndef DISABLE_FEATURE
#define DISABLE_FEATURE false
#endif
// later
#if DISABLE_FEATURE == false
...
Run Code Online (Sandbox Code Playgroud)
规范化检查定义性有点棘手,因为您无法将空宏与值进行比较。但这是可能的。你可以使用这样的宏魔法(从这里借来的扩展魔法):
#define DO_EXPAND(VAL) VAL ## 1
#define EXPAND(VAL) DO_EXPAND(VAL)
#if defined(DISABLE_FEATURE) \
&& (EXPAND(DISABLE_FEATURE) == false)
#undef DISABLE_FEATURE
#endif
// later
#ifdef DISABLE_FEATURE
...
Run Code Online (Sandbox Code Playgroud)
我建议改为坚持一种方式并记录下来。我特别建议检查定义性,并完全忽略该值。