静态结构声明

时间:2013-06-26 18:17:19

标签: c static initialization

我正在尝试定义一个静态结构并在声明它时初始化它的值,但我不确定如何这样做。

我在一个循环中调用一个函数,我想第一次将timespec(特别是tv_sec值)初始化为0(一种默认值)调用该函数,但永远不会再调用。

我知道我可以通过以下方式对整数和其他简单数据类型执行此操作: static int foo = 0

但是我想对结构做同样的事情,所以它不那么简单。

基本上,我想这样做:static struct timespec ts.tv_sec = 0;但是,这是非法的,所以我需要知道法律形式(如果存在)。

帮助?

3 个答案:

答案 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.无需找到永远无法使用的“魔法”值。