gpt4 book ai didi

c - 通过宏过度使用进行结构初始化

转载 作者:行者123 更新时间:2023-11-30 16:04:15 25 4
gpt4 key购买 nike

我有一些结构需要初始化,手动执行这会很乏味。我想创建一个宏来帮助我......但我不确定 C 预处理器是否足够好。

我有代表菜单的结构。它们仅包含函数指针:

typedef uint8_t (*button_handler) (uint8_t);
typedef void (*pedal_handler) (void);
typedef void (*display_handler) (void);
typedef void (*menu_switch_handler) (void);

#define ON_BUTTON(x) uint8_t menu_frame_##x##_button (uint8_t button)
#define ON_PEDAL(x) void menu_frame_##x##_pedal (void)
#define ON_DISPLAY(x) void menu_frame_##x##_display (void)
#define ON_SWITCH(x) void menu_frame_##x##_switch (void)

typedef struct menu_frame {
button_handler on_button;
pedal_handler on_pedal;
display_handler on_display;
menu_switch_handler on_switch;
} menu_frame;

这允许我将函数和单独的函数编写为(.c 文件):

ON_BUTTON(blah) { ... }

和菜单(.h 文件):

ON_BUTTON(blah);
ON_DISPLAY(blah);
menu_frame menu_frame_blah = {
menu_frame_blah_button,
NULL,
menu_frame_blah_display,
NULL
};

有什么方法可以将菜单定义折叠成一个定义吗?我可以做一些扩展MENU(blah, menu_frame_blah_button, NULL, menu_frame_blah_display, NULL)的事情当然可以,但是有没有办法:

  • 使其更短(NULL 或某个名称)
  • 删除ON_BUTTON(...);的需要从结构之前

理想情况下,我想要MENU(blah, button, NULL, display, NULL)定义处理程序和菜单结构本身。例如,我不知道如何防止将最后一项扩展到 ON_SWITCH(NULL) .

或者也许我应该从其他方式来处理它?<​​/p>

最佳答案

我之前已经编写过 Python 脚本来生成此类代码。您可能想走这条路,并将脚本应用到您的构建过程中。

关于c - 通过宏过度使用进行结构初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3259625/

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