Nea*_*lon 4 c static initialization
我试图定义一个静态结构和初始化它,当它被宣布一次值,但我真的不知道我会怎么做.
我打电话在一个循环的功能,我想初始化timespec(特别是tv_sec值)0(排序默认值)在第一次函数被调用,但从来没有一次.
我知道我可以通过执行以下操作来完成整数和其他简单数据类型:
static int foo = 0
但我想用一个结构来做同样的事情,所以它不那么简单.
基本上,我想这样做:static struct timespec ts.tv_sec = 0;但是,这是非法的,所以我需要知道法律形式(如果存在).
救命?
聚合对象(如结构或数组)使用初始值设定项进行= { ... }初始化.您可以从第一个开始为结构的连续成员提供初始值设定项,也可以使用C99标记方法
static struct timespec ts = { .tv_sec = 0 };
Run Code Online (Sandbox Code Playgroud)
请注意,这种= { ... }方法比初看起来更普遍.标量对象也可以使用这样的初始化器进行初始化
static int foo = { 0 };
Run Code Online (Sandbox Code Playgroud)
另请注意,= { 0 }将聚合对象中的所有数据字段归零,而不仅仅是第一个.
最后请记住,具有静态存储持续时间的对象总是自动进行零初始化,这意味着如果您只是声明
static struct timespec ts;
Run Code Online (Sandbox Code Playgroud)
你已经保证最终会得到零初始化对象.无需明确地执行此操作.