1

假设我们有一个 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 个支持 FEATURE,因此我们编写:

#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 

现在我想有一个地方来概括地描述这个 FEATURE 的含义和作用。

4

1 回答 1

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

您也可以考虑使用常量而不是宏。

于 2018-11-07T06:58:18.877 回答