请教在函数外给单个结构体成员赋值
在函数外给单个结构体成员赋值为什么不行呢?比如以下程序代码:structparameter_type{//offset0intError;//Errorcodeintsi...
在函数外给单个结构体成员赋值为什么不行呢?比如以下程序代码:
struct parameter_type
{
// offset 0
int Error; // Errorcode
int size;
int usLedState; // Actual state of the LED
} parameter;
parameter.Error=0;
main()
{
...
}
如果像这段代码一样将单个结构体成员在函数外赋值(初始化),编译时就会弹出“ Type mismatch in redeclaration of 'parameter' ”。
其它什么都不变,只要将给该单个成员赋值的语句放在函数内就没有问题。即,将parameter.Error=0;放在main()函数中,代码如下:
struct parameter_type
{
// offset 0
int Error; // Errorcode
int size;
int usLedState; // Actual state of the LED
} parameter;
main()
{
parameter.Error=0;
...
}
可以编译通过,请教高手原因。
我看了结构体初始化的书籍,虽然没有讲到这种在函数外单个初始化的情况,但也没有说这种方法就不行啊?
再次感谢 “imarine”的回答,也非常感谢“高原的金”的回答。“高原的金”的见解独到,但是没有哪个教材或编译器说明上介绍过用户自定义的复杂类型(如结构体)编译器在编译阶段无法识别啊?能否给提供出处,让本人深记此点,不再遇见此种问题时心存顾虑。再次感谢! 展开
struct parameter_type
{
// offset 0
int Error; // Errorcode
int size;
int usLedState; // Actual state of the LED
} parameter;
parameter.Error=0;
main()
{
...
}
如果像这段代码一样将单个结构体成员在函数外赋值(初始化),编译时就会弹出“ Type mismatch in redeclaration of 'parameter' ”。
其它什么都不变,只要将给该单个成员赋值的语句放在函数内就没有问题。即,将parameter.Error=0;放在main()函数中,代码如下:
struct parameter_type
{
// offset 0
int Error; // Errorcode
int size;
int usLedState; // Actual state of the LED
} parameter;
main()
{
parameter.Error=0;
...
}
可以编译通过,请教高手原因。
我看了结构体初始化的书籍,虽然没有讲到这种在函数外单个初始化的情况,但也没有说这种方法就不行啊?
再次感谢 “imarine”的回答,也非常感谢“高原的金”的回答。“高原的金”的见解独到,但是没有哪个教材或编译器说明上介绍过用户自定义的复杂类型(如结构体)编译器在编译阶段无法识别啊?能否给提供出处,让本人深记此点,不再遇见此种问题时心存顾虑。再次感谢! 展开
3个回答
展开全部
个人看法,仅供参考。
关于“为什么整型的就可以,结构体类型的就不能这么赋值呢?”——整形等常规数据类型由编译器自动识别,而自定义的数据类型(楼主自定义的结构体类型),编译器在编译阶段无法识别,故出错。
关于“在函数外单个初始化”——在入口函数(main函数)之前定义变量及初始化,得到的是全局变量。编译器对程序进行编译时,必须先构造或者创建全局变量,为全局变量分配内存,再找入口函数;而在创建全局变量时,该变量类型(楼主自定义的结构体)编译器无法识别,故无法创建该全局变量。
进入main函数之后,数据类型(楼主自定义的结构体)被定义,因此再进行变量定义及初始化,肯定就不会出错。
关于“为什么整型的就可以,结构体类型的就不能这么赋值呢?”——整形等常规数据类型由编译器自动识别,而自定义的数据类型(楼主自定义的结构体类型),编译器在编译阶段无法识别,故出错。
关于“在函数外单个初始化”——在入口函数(main函数)之前定义变量及初始化,得到的是全局变量。编译器对程序进行编译时,必须先构造或者创建全局变量,为全局变量分配内存,再找入口函数;而在创建全局变量时,该变量类型(楼主自定义的结构体)编译器无法识别,故无法创建该全局变量。
进入main函数之后,数据类型(楼主自定义的结构体)被定义,因此再进行变量定义及初始化,肯定就不会出错。
展开全部
没见过在函数外通过单独语句给全局变量赋值的情况。
程序这种东西,语法上没说不可以的,不一定就可以。
你的做法貌似不合法。楼上的做法是定义时即初始化,和定义之后在函数体外单独初始化也不是一个情况。
程序设计,语法是一个规则,有些做法不符合规则,就不能用。
你的学习和钻研精神值得肯定和尊重,但是,编程方面,有太多不能问为什么的,只要知道怎么做就可以了。
我确实不知道为什么,但是应该有理论依据的,找到的话,再告诉你。
程序这种东西,语法上没说不可以的,不一定就可以。
你的做法貌似不合法。楼上的做法是定义时即初始化,和定义之后在函数体外单独初始化也不是一个情况。
程序设计,语法是一个规则,有些做法不符合规则,就不能用。
你的学习和钻研精神值得肯定和尊重,但是,编程方面,有太多不能问为什么的,只要知道怎么做就可以了。
我确实不知道为什么,但是应该有理论依据的,找到的话,再告诉你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
struct parameter_type
{
// offset 0
int Error; // Errorcode
int size;
int usLedState; // Actual state of the LED
} parameter_type={1,2,3};
{
// offset 0
int Error; // Errorcode
int size;
int usLedState; // Actual state of the LED
} parameter_type={1,2,3};
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询