谢谢你的时间!我到处走走了很多,找到了几乎可以解决我的问题的答案,但还不完全是。
typedef struct
{
int menuparams; //lots of these here
void (*menufunction)(MENUSTRUCT); //points to "void functionname(MENUSTRUCT *menu)"
}MENUSTRUCT;
我有一种情况要使用结构存储函数指针。我的代码读取这些结构的数组(检查每个结构中的变量),并在确定要使用的结构后,跟随其功能指针指向必要的功能。
但是,所讨论的函数接受指向该完全相同的结构类型的指针,因为它们可能需要对相同类型的另一个结构执行某些工作。当遵循函数指针时,将传递此其他结构的指针。
我当前的实现似乎可行,但我想知道将来是否会给自己带来麻烦。它可以编译并正常运行,但在声明函数指针的行上收到以下警告:
警告:函数声明中的参数名称(无类型)
这是有道理的,因为在我完成声明之前,我的结构并不存在。但是我无法弄清楚如何最好地重写它,以使结构包含其自身类型的引用很高兴。我已经研究了结构的前向声明,但是如果我从上述实现中走得更远,编译器就会变得更加笨拙。
如果我尝试过:
typedef struct menu
{
int menuparamss; //lots of these here
void (*menufunction)(menu);
}MENUSTRUCT;
它至少可以编译和工作,但具有相同的警告。
由于它似乎可以正常工作,但从技术上讲并不是世界末日,但是如果将来在某个时候,由于我的愚蠢,MCU可能自发起火,那我现在最好了!
很简单,只需使用完整的类型名称,或向前声明typedef:
选项1:
typedef struct menu {
int menuparamss;
//Must use the whole type name, including the "struct" keyword
void (*menufunction)(struct menu *); //SHOULD BE A POINTER to the structure
}MENUSTRUCT;
选项2:
typedef struct menu MENUSTRUCT;
//Without typedef
struct menu {
int menuparamss;
void (*menufunction)(MENUSTRUCT*); //SHOULD BE A POINTER to the structure
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句