我得到了许多包含枚举的模块。 (它们保存在状态机中使用的信号)。
模块信号.h:
enum ModuleASignals {
modASig1,
modASig2,
...
modASigN,
};
模块Bsignals.h:
enum ModuleBSignals {
modBSig1,
modBSig2,
...
modBSigM,
};
每个模块具有任意数量的信号。
现在我想在一个应用程序中组合随机选择的模块。问题是,所有信号都必须全局可见,并且信号必须保持唯一。一个信号(8 位)的大小也有限制,所以我不能只为单个模块的枚举提供唯一的偏移量。
如何将单个枚举合并为一个,而不必为每个应用程序调整信号头文件?一种方法是将元素(没有“enum ... {”)放入文件并包含这些片段,但这会导致 IDE 无法理解代码,因此会导致一些不便。
最佳答案
如果可以接受一个 .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
关于结合不同模块中的枚举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10111712/