gpt4 book ai didi

c - 如何解决 C 和函数指针中的循环依赖问题

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

|在一个程序中,我将这个结构与函数指针一起使用,但我想更改它,以便我可以用一条语句保存、恢复和替换函数指针。

typedef struct MenuStr
{
// more elements
uint8_t (*ButtonUpPtr)(struct MenuStr *Menu);
uint8_t (*ButtonDownPtr)(struct MenuStr *Menu);
uint8_t (*ButtonLeftPtr)(struct MenuStr *Menu);
uint8_t (*ButtonRightPtr)(struct MenuStr *Menu);
uint8_t (*PreMenuCursorPtr)(struct MenuStr *Menu);
uint8_t (*MenuCursorPtr)(struct MenuStr *Menu);
uint8_t (*PostMenuCursorPtr)(struct MenuStr *Menu);
// more elements
}MENU;

因此我想将上面的更改为允许使用一条语句复制所有指针。

typedef struct Cursorstr
{
uint8_t (*ButtonUpPtr)(struct MenuStr *Menu);
uint8_t (*ButtonDownPtr)(struct MenuStr *Menu);
uint8_t (*ButtonLeftPtr)(struct MenuStr *Menu);
uint8_t (*ButtonRightPtr)(struct MenuStr *Menu);
uint8_t (*PreMenuCursorPtr)(struct MenuStr *Menu);
uint8_t (*MenuCursorPtr)(struct MenuStr *Menu);
uint8_t (*PostMenuCursorPtr)(struct MenuStr *Menu);
}CURSOR_STR;

typedef struct MenuStr
{
// more elements
CURSOR_STR Elements;
// more elements
}MENU;

现在我遇到了指针参数的问题,我找不到解决方案。感谢您的帮助

最佳答案

您必须转发声明MENU 结构。在 CURSOR_STR 声明之前添加:

typedef struct MenuStr MenuStr;

所有这一切都是为了告诉编译器程序中将有一个名为 MenuStr 的结构,但稍后将对其进行定义。


还可以考虑对函数指针使用 typedef。完整示例:

typedef struct MenuStr MenuStr;

typedef uint8_t ButtonFunc (MenuStr*);

typedef struct Cursorstr
{
ButtonFunc* ButtonUpPtr;
ButtonFunc* ButtonDownPtr;
ButtonFunc* ButtonLeftPtr;
ButtonFunc* ButtonRightPtr;
ButtonFunc* PreMenuCursorPtr;
ButtonFunc* MenuCursorPtr;
ButtonFunc* PostMenuCursorPtr;
}CURSOR_STR;

typedef struct MenuStr
{
// more elements
CURSOR_STR Elements;
// more elements
}MENU;

关于c - 如何解决 C 和函数指针中的循环依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57590415/

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