高级会员

- 积分
- 556
- 金钱
- 556
- 注册时间
- 2020-3-6
- 在线时间
- 77 小时
|
1金钱
调试的时候发现一个奇怪的现象,头文件里声明了一个结构体类型,主程序中定义这个结构体全局变量并初始化,如果把这个初始化语句放在main函数前面全局区的第一句,编译不报错但运行结果明显错误;但如果将该初始化语句前面任意加一句,哪怕是一句不用的变量定义(比如int i;),编译运行就正常,这是什么道理?像这样写:
typedef struct
{
...
}test; //声明结构体类型(在头文件里)
#include 头文件
test a = {...}; //定义并初始化结构体变量(放在全局区第一句)
int main(void)
{
过程中会用到结构体变量a
...
}
这样写编译正常,但运行结果不正常
改成下面这样:
typedef struct
{
...
}test; //声明结构体类型(在头文件里)
#include 头文件
int i; //这里任意加一句变量定义,哪怕这个变量是不用的
test a = {...}; //定义并初始化结构体变量(也就是把初始化语句不放在第一句)
int main(void)
{
过程中会用到结构体变量a
...
}
这样写,编译运行都正常,换了不同的程序验证都是这样,是编译器的问题吗?
如果把定义初始化语句放main函数内部,也就是变成局部变量也是正常的。
|
|