我正在尝试为路由层创建一些宏。路由器应该能够从其他模块调用功能,路由基于通道。
我有2个枚举:
typedef enum
{
AModule,
BModule
}Module;
typedef enum
{
CH0,
CH1
}Channels;
配置:
#define AModule_Init(param) ExternalInitFunction(param)
#define CH0_Module AModule
#define CH1_Module BModule
路由器宏:
#define GetModule(channel) (channel##_Module)
#define RouterInit(channel,param) GetModule(channel)##_Init(param)
我想要这样做:
RouterInit(CH0,param);
我期待这个流程:
我收到错误:期待&#34 ;;"
答案 0 :(得分:4)
预处理器无法执行2次传递。为什么不在1遍中定义RouterInit
?
#define RouterInit(channel,param) channel##_Module##_Init(param)
int main()
{
RouterInit(CH0,12);
}
该代码段gcc -E
的结果(以及您声明的其他内容):
int main()
{
CH0_Module_Init(12);
}