【发布时间】:2012-11-07 07:06:14
【问题描述】:
我正在使用 CodeSourcery GCC 4.5.2 for ARM 为 STM32 编写 C 代码。我在初始化全局结构时遇到问题。代码如下。
在 struct.h 中
typedef struct
{
int foo;
...
int bar;
} mystruct;
extern mystruct example;
在 struct.c 中
mystruct example = {100,200 ..., 1000};
在 Main.c 中
#include "struct.h"
int temp;
temp = example.foo;
代码编译没有任何问题。但是在调试的时候,我发现这个结构已经被所有的垃圾值初始化了!! temp 的值应该是 100,但它总是被证明是一个垃圾值。我在 PC 上使用 eclipse + openOCD + GDB 硬件调试,在硬件端使用 Olimex JTAG。
这是编译器的问题吗?还是我在这里遗漏了什么?
【问题讨论】:
-
注意:在 struct.c 我已经包含了 struct.h
-
那么,这是在文件范围内吗?国际温度; temp = example.foo;你说它编译......这很有趣,因为编译器应该拒绝它。这是编译器中的一个错误,它甚至可以编译,除非这里有一些奇怪的扩展。您只能在文件范围内初始化变量以编译时间常量: int temp = 0x14;
-
“编译”是指“编译和链接”吗?您需要来自
Main.c和struct.c的目标代码。 -
等等,什么?声明一个变量然后给它赋值是完全合法的。
-
将变量的值设置为全局变量是非法的。全局变量只能用常量@AdamLiss 初始化
标签: c struct initialization arm