让我们假设我们有一个C ++项目,该项目应该在多个平台(例如arm / arm64)上工作,并且我们需要为每个平台具有特定于目标的值。
现在我们要做:
#ifdef PLATFORM_ARM
#define TIMEOUT_VALUE 0
#define OUR_MAGIC_VALUE 1
#elif PLATFORM_ARM64
#define TIMEOUT_VALUE 2
#define OUR_MAGIC_VALUE 3
#endif
在哪里可以为每个定义的名称添加注释,以便可以从每个定义中访问它?
注意:我无法像
一样在自己的#ifdef中定义每个值// a comment for TIMEOUT_VALUE
#ifdef PLATFORM_ARM
#define TIMEOUT_VALUE 0
#elif PLATFORM_ARM64
#define TIMEOUT_VALUE 2
#endif
// a comment for OUR_MAGIC_VALUE
#ifdef PLATFORM_ARM
#define OUR_MAGIC_VALUE 1
#elif PLATFORM_ARM64
#define OUR_MAGIC_VALUE 2
#endif
因为我有这些值的列表和树。
谢谢。
编辑1: 例如,我们有6个目标,其中有4个支持功能, 所以我们写:
#if defined(ARM)
#define FEATURE 1
#elif defined(ARM64)
#define FEATURE 0
#elif define(MIPS)
#define FEATURE 1
etc... for other platforms.
然后我在某处有读取此定义的代码:
#if FEATURE
do something. Note that this part can't be described in a target specific file, because it can have the same implementation for several targets.
#endif
现在我想有一个地方来大致描述此功能的含义和作用。
答案 0 :(得分:4)
您可以定义代理宏,并为要供最终用户使用的宏写一个注释:
#ifdef PLATFORM_ARM
#define TIMEOUT_VALUE_IMPL 0
#define OUR_MAGIC_VALUE_IMPL 1
#elif PLATFORM_ARM64
#define TIMEOUT_VALUE_IMPL 2
#define OUR_MAGIC_VALUE_IMPL 3
#endif
// a comment for TIMEOUT_VALUE
#define TIMEOUT_VALUE TIMEOUT_VALUE_IMPL
// a comment for OUR_MAGIC_VALUE
#define OUR_MAGIC_VALUE OUR_MAGIC_VALUE_IMPL
您也可以考虑使用常量代替宏。