我得到了许多包含枚举的模块。 (它们保存在状态机中使用的信号)。

模块信号.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/

10-12 14:15
查看更多