3

列挙型を含む多くのモジュールを取得しました。(ステートマシンで使用される信号を保持します)。

moduleAsignals.h:

enum ModuleASignals {
  modASig1,   
  modASig2,   
  ...
  modASigN,   
};

moduleBsignals.h:

enum ModuleBSignals {
  modBSig1,   
  modBSig2,   
  ...
  modBSigM,   
};

各モジュールには、任意の数の信号があります。

ここで、ランダムに選択したモジュールを 1 つのアプリケーションに結合したいと考えています。問題は、すべてのシグナルがグローバルに表示される必要があり、シグナルが一意である必要があることです。また、1 つのシグナル (8 ビット) のサイズには制限があるため、単一のモジュールの列挙型に一意のオフセットを与えることはできません。

アプリケーションごとにシグナルヘッダーファイルを調整することなく、単一の列挙型を 1 つに結合するにはどうすればよいですか? 1 つの方法は、("enum ... {" なしで) 要素をファイルに入れ、これらのフラグメントを含めることですが、これは IDE が理解できないコードになり、不都合が生じます。

4

2 に答える 2

4

一方の .h に他方を含めることが許容される場合は、次のように記述できます。

enum ModuleBSignals {
  modBSig1 = modASigN+1,   
  modBSig2,   
  ...
  modBSigM,   
};

したがって、2 番目の enum は最初の enum の直後に開始されます。

追加

ダミーの最初の要素を使用して、すべてのモジュールをパラメーター化してみることができます。

#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
于 2012-04-11T18:28:22.197 に答える
2

単一enumを使用して、プリプロセッサを介して特定のモジュールを有効にすることができます。

enum Signals {
#ifdef USE_MODULE_A
  modASig1,   
  modASig2,   
  ...
  modASigN,   
#endif
#ifdef USE_MODULE_B
  modBSig1,   
  modBSig2,   
  ...
  modBSigM,   
#endif
};

これは、コードフラグメントを介したソリューションとほぼ同等ですが、IDEに適している可能性があります...

于 2012-04-11T18:40:14.213 に答える