我正在尝试定义一个静态结构并在声明它时初始化它的值,但我不确定如何这样做。
我在一个循环中调用一个函数,我想第一次将timespec
(特别是tv_sec
值)初始化为0
(一种默认值)调用该函数,但永远不会再调用。
我知道我可以通过以下方式对整数和其他简单数据类型执行此操作:
static int foo = 0
但是我想对结构做同样的事情,所以它不那么简单。
基本上,我想这样做:static struct timespec ts.tv_sec = 0;
但是,这是非法的,所以我需要知道法律形式(如果存在)。
帮助?
答案 0 :(得分:7)
聚合对象(如结构或数组)使用= { ... }
初始值设定项进行初始化。您可以从第一个开始为结构的连续成员提供初始值设定项,或者使用C99标记方法
static struct timespec ts = { .tv_sec = 0 };
请注意,= { ... }
方法比初看起来更普遍。标量对象也可以使用这样的初始化器进行初始化
static int foo = { 0 };
另请注意,= { 0 }
会将聚合对象中的所有数据字段归零,而不仅仅是第一个。
最后请记住,具有静态存储持续时间的对象总是自动进行零初始化,这意味着如果您只是声明
static struct timespec ts;
您已经保证最终会使用零初始化对象。无需明确地做到。
答案 1 :(得分:1)
静态对象,无论它是否为struct,union,array或basic类型,在没有显式初始值设定项的情况下始终为零。只需使用
static struct timespec foo;
答案 2 :(得分:0)
您可以简单地使用另一个变量:
,而不是使用“无效”值进行初始化static struct timespec ts;
static int ts_initialized = 0;
if (!ts_initialized) {
init_ts(&ts);
ts_initialized = 1;
}
优点:
1.更清楚一点
2.无需找到永远无法使用的“魔法”值。