我有很多包含枚举的模块。 (它们保存在状态机中使用的信号)。
moduleAsignals.h:
enum ModuleASignals {
modASig1,
modASig2,
...
modASigN,
};
moduleBsignals.h:
enum ModuleBSignals {
modBSig1,
modBSig2,
...
modBSigM,
};
每个模块都有任意数量的信号。
现在我想在一个应用程序中组合随机选择模块。问题是,所有信号必须全局可见,并且信号必须保持唯一。此外,一个信号(8位)的大小也有限制,因此我不能仅为单个模块的枚举提供唯一的偏移量。
如何将单个枚举合并为一个,而无需为每个应用程序调整信号头文件?一种方法是将元素(没有“enum ... {”)放入文件中并包含这些片段,但这会导致IDE无法理解的代码,因此会带来一些不便。
答案 0 :(得分:4)
如果有一个.h包括另一个可接受,你可以写
enum ModuleBSignals {
modBSig1 = modASigN+1,
modBSig2,
...
modBSigM,
};
第二个枚举将在第一个枚举之后开始。
加:
您可以尝试使用虚拟的第一个元素参数化所有模块:
#include "sig_start.h" // Default one contains #define START 0
enum ModuleBSignals {
modBSig1 = START,
...
构建过程的责任是为每个模块目录创建一个正确的sig_start.h。第N + 1个sig_start.h将包含
#include module1signals.h
...
#include moduleNsignals.h
#define START modNSigM+1
答案 1 :(得分:2)
您可以使用单个enum
并通过预处理器启用特定模块:
enum Signals {
#ifdef USE_MODULE_A
modASig1,
modASig2,
...
modASigN,
#endif
#ifdef USE_MODULE_B
modBSig1,
modBSig2,
...
modBSigM,
#endif
};
这通过代码片段大致相当于您的解决方案,但可能更适合IDE ...