繁体   English   中英

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

[英]How to solve a problem with circular dependancy in C and function pointers

|在程序中,我将此结构与函数指针一起使用,但是我想对其进行更改,以便可以用一个语句来保存,恢复和替换函数指针。

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM