我想问你:静态结构的元素是否初始化为零?例如:
static struct _radioSettings
{
unsigned char radio_in;
unsigned char radio_out;
}radioSettings;
所以这个结构放在模块radio-settings.c中 如果radioSettings.radio_in和radioSettings.radio_out在编译时没有初始化为零,我如何在模块radio-settings.c中初始化它们?
答案 0 :(得分:3)
所有全局变量都初始化为默认值。
第6.7.8节C99标准(n1256)的初始化说:
如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的。如果没有显式初始化具有静态存储持续时间的对象,则:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则初始化为(正或无符号)零;
- 如果是聚合,则根据这些规则初始化(递归)每个成员;
- 如果是联合,则根据这些规则初始化(递归)第一个命名成员。
因此,对于您的结构,每个字段都会初始化为其默认值,即 0 。
答案 1 :(得分:2)
静态,在C中,与结构的可见性有关,除了从外部模块radio-settings.c
看不到外,其他任何意义都没有。
C中的结构不初始化为任何东西。它的字段值是结构所落入的内存值。所以,你不能指望这样的东西。
如果要初始化结构,那么很简单:
memset( &radioSettings, 0, sizeof( _radioSettings ) );
您只需将其放置在模块init()
radio-settings.c
函数中
希望这有帮助。