静态结构的元素

时间:2015-05-04 07:43:00

标签: c

我想问你:静态结构的元素是否初始化为零?例如:

static struct _radioSettings
{
   unsigned char radio_in;
   unsigned char radio_out;
}radioSettings;

所以这个结构放在模块radio-settings.c中 如果radioSettings.radio_in和radioSettings.radio_out在编译时没有初始化为零,我如何在模块radio-settings.c中初始化它们?

2 个答案:

答案 0 :(得分:3)

所有全局变量都初始化为默认值。

第6.7.8节C99标准(n1256)的初始化说:

  

如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的。如果没有显式初始化具有静态存储持续时间的对象,则:

     

- 如果它有指针类型,则将其初始化为空指针;

     

- 如果它有算术类型,则初始化为(正或无符号)零;

     

- 如果是聚合,则根据这些规则初始化(递归)每个成员;

     

- 如果是联合,则根据这些规则初始化(递归)第一个命名成员。

因此,对于您的结构,每个字段都会初始化为其默认值,即 0

答案 1 :(得分:2)

静态,在C中,与结构的可见性有关,除了从外部模块radio-settings.c看不到外,其他任何意义都没有。

C中的结构初始化为任何东西。它的字段值是结构所落入的内存值。所以,你不能指望这样的东西。

如果要初始化结构,那么很简单:

memset( &radioSettings, 0, sizeof( _radioSettings ) );

您只需将其放置在模块init()

内的 radioSettings radio-settings.c函数中

希望这有帮助。