请教在函数外给单个结构体成员赋值

在函数外给单个结构体成员赋值为什么不行呢?比如以下程序代码: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”的回答,也非常感谢“高原的金”的回答。“高原的金”的见解独到,但是没有哪个教材或编译器说明上介绍过用户自定义的复杂类型(如结构体)编译器在编译阶段无法识别啊?能否给提供出处,让本人深记此点,不再遇见此种问题时心存顾虑。再次感谢!
展开
 我来答
高原的金
2010-08-30 · 超过10用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:27.7万
展开全部
个人看法,仅供参考。

关于“为什么整型的就可以,结构体类型的就不能这么赋值呢?”——整形等常规数据类型由编译器自动识别,而自定义的数据类型(楼主自定义的结构体类型),编译器在编译阶段无法识别,故出错。

关于“在函数外单个初始化”——在入口函数(main函数)之前定义变量及初始化,得到的是全局变量。编译器对程序进行编译时,必须先构造或者创建全局变量,为全局变量分配内存,再找入口函数;而在创建全局变量时,该变量类型(楼主自定义的结构体)编译器无法识别,故无法创建该全局变量。

进入main函数之后,数据类型(楼主自定义的结构体)被定义,因此再进行变量定义及初始化,肯定就不会出错。
百度网友08a0473e8
2010-08-30 · 超过12用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:0
展开全部
没见过在函数外通过单独语句给全局变量赋值的情况。
程序这种东西,语法上没说不可以的,不一定就可以。
你的做法貌似不合法。楼上的做法是定义时即初始化,和定义之后在函数体外单独初始化也不是一个情况。

程序设计,语法是一个规则,有些做法不符合规则,就不能用。
你的学习和钻研精神值得肯定和尊重,但是,编程方面,有太多不能问为什么的,只要知道怎么做就可以了。

我确实不知道为什么,但是应该有理论依据的,找到的话,再告诉你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AE869527AE
2010-08-29
知道答主
回答量:23
采纳率:0%
帮助的人:13.6万
展开全部
struct parameter_type
{
// offset 0
int Error; // Errorcode
int size;
int usLedState; // Actual state of the LED
} parameter_type={1,2,3};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式