【发布时间】:2012-07-30 02:08:07
【问题描述】:
我在嵌入式系统上工作,而不是 Windows 系统。
我声明:
static uint_8 i = 0;
所以 i 在开始时刻被定义为 0。
问题:重置后我被重新定义为 0 还是它在 ram 地址获得垃圾信息?例如,我是否需要编写一个 init 函数将 i 重新定义为 0?
谢谢
【问题讨论】:
我在嵌入式系统上工作,而不是 Windows 系统。
我声明:
static uint_8 i = 0;
所以 i 在开始时刻被定义为 0。
问题:重置后我被重新定义为 0 还是它在 ram 地址获得垃圾信息?例如,我是否需要编写一个 init 函数将 i 重新定义为 0?
谢谢
【问题讨论】:
这取决于您的运行时库(如果有)。如果您有一个现有的运行时库,它可能会在启动时将您的静态数据初始化为零(main() 之前)。但是,某些嵌入式系统可能没有完整的运行时库支持,因此您可能必须自己执行此操作。
【讨论】:
不,您不必这样做。所有静态变量保证在程序启动时初始化为0。
C 标准 ISO/IEC 9899:TC2 对此进行了如下定义。
6.2.4 对象的存储期限
一个对象,其标识符使用外部或内部链接或存储类声明 说明符 static 具有静态存储持续时间。它的寿命是 程序的整个执行过程及其存储的值被初始化 只有一次,在程序启动之前。
【讨论】: