ルーティングレイヤ用にいくつかのマクロを作成しようとしています。ルータは別のモジュールから関数を呼び出すことができます。ルーティングはチャネルに基づいています。マクロ名を連結する
RouterInit(CH0,param);
:私はこれを行うotの欲しい
#define GetModule(channel) (channel##_Module)
#define RouterInit(channel,param) GetModule(channel)##_Init(param)
:
typedef enum
{
AModule,
BModule
}Module;
typedef enum
{
CH0,
CH1
}Channels;
構成:
#define AModule_Init(param) ExternalInitFunction(param)
#define CH0_Module AModule
#define CH1_Module BModule
ルータマクロ
は、私が2列挙型を持っています
iはこのフローを期待:
- RouterInit(CH0、PARAM)=>
- GetModule(CH0)## _初期化(パラメータ)=>
- CH0_Module ## _初期化(パラメータ)=>
- AModule ## _初期化(パラメータ)=>
- AModule_Init(パラメータ)=>
- ExternalInitFunction(PARAM)
私はエラーが発生します:は ";"
ほとんどのコンパイラは、前処理後に停止し、前処理ファイルを生成するオプションがあります。あなたのマクロで本当に何ができるかを見るために、そうすることをお勧めします。 –
'(channel ## _ Module)'を 'channel ## _ Module'に置き換えてください。 –
プリプロセッサは2つのパスを行いません: '#define RouterInit(channel、param)channel ## _ Module ## _ Init(param)'を試してください –