gpt4 book ai didi

连接宏名称

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:58 25 4
gpt4 key购买 nike

我正在尝试为路由层创建一些宏。路由器应该能够调用其他模块的功能,路由是基于 channel 的。

我有 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);

我期待这样的流程:

  • RouterInit(CH0,param) =>
  • GetModule(CH0)##_Init(param) =>
  • CH0_Module##_Init(param) =>
  • AModule##_Init(param) =>
  • AModule_Init(param) =>
  • 外部初始化函数(参数)

我收到错误:需要一个“;”

最佳答案

预处理器无法执行 2 遍。为什么不一次性定义 RouterInit

#define RouterInit(channel,param) channel##_Module##_Init(param)

int main()
{
RouterInit(CH0,12);
}

gcc -E 对该片段的结果(加上您声明的其他内容):

int main()
{
CH0_Module_Init(12);
}

关于连接宏名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47829984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com