前一阵子在写程序的时候发现的一个问题,简化后的代码如下:
int a;
void fun1()
{
a=1;
}
void fun2()
{
a=2;
}
void fun3()
{
a=3;
}
typedef void (*MenuFun)(void);
typedef struct{
char *caption;
MenuFun menuFun;
}MenuItem;
typedef struct{
MenuItem menuItem[3];
}Menu;
Menu myMenu={
{"hello",fun1},
{"wrold",fun2},
{"!",fun3}
};
main()
{
;
}
编译时好现了一个Error: too many initializer values,其怪的是把初始化时第下个MenuItem 的大括号去掉,即改成下面这样就没报错,并且程序能正常运行
Menu myMenu={
"hello",fun1,
{"wrold",fun2},
{"!",fun3}
};
后来仔细一想就明白了,首先Menu是一个结构体,所以在给他赋初值时是下面的格式
Menu myMenu=
{
Menu结构体第1个元素menuItme[3]的初值
(PS: menuItem 是 MemuItem数