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