感谢您的时间!我一直在四处寻找并找到几乎解决我问题的答案,但并不完全。
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可能会自发地迸发出火焰,我现在最了解它! / p>
答案 0 :(得分:3)
很简单,只需使用完整的类型名称,或者转发声明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
};
答案 1 :(得分:1)
首先定义类型MENUSTRUCT,然后定义结构MENUSTRUCT。
typedef struct MENUSTRUCT MENUSTRUCT;
struct MENUSTRUCT
{
int menuparams; //lots of these here
void (*menufunction)(MENUSTRUCT*);
};