重新初始化timeval结构

时间:2011-06-24 00:22:37

标签: c++ struct timeval

如何从time.h重新初始化timeval结构?

我知道我可以将结构的两个成员重置为零,但是我还有其他方法可以忽略吗?

5 个答案:

答案 0 :(得分:12)

完全正确且可移植(尽管是C99)零初始化任意(可能是聚合)类型的方法:

myTime = (struct timeval){0};

即使对于包含指针和浮点成员的结构,这也适用,即使实现不使用全零位作为空指针和浮点零的表示。

答案 1 :(得分:3)

memset可能会在您的平台上运行,但它实际上不是推荐的(便携式)方法......

这是:

struct timeval myTime;

myTime = (struct timeval){ 0 };

memset有效,因为struct timeval的所有元素碰巧都有零值,这些值由平台上的全零位模式表示。

但这不是规范所要求的。特别是,POSIX不要求time_t类型为整数,而C不要求浮点零表示为全零字节。

使用初始化语法保证结构的字段将被正确设置为零,无论它们是整数,浮点,指针还是其他结构......即使这些事物的表示在内存中并非全为零。对于memset来说,情况并非如此。

答案 2 :(得分:1)

假设您希望将struct timeval结构重新初始化为零值,无论它们是浮点类型还是整数类型,而不管浮点类型的零表示,都可以使用C90或更高版本的方法或者C ++:

static struct timeval init_timeval;  // or whatever you want to call it

// ...

myTime = init_timeval;

R.'s answerNemo's answer一样,这也将处理NULL指针,无论它们如何表示。我无法想象为什么struct timeval会有一个指针,但我提到这一点是因为该技术对struct timeval以外的结构很有用。

与其他答案相比,它的缺点是它需要在某处定义静态或全局变量。它的优点是它可以与非C99编译器一起使用。

答案 3 :(得分:0)

如果你正在寻找一个单行,我想你也可以使用memset来完成工作:

struct timeval myTime;

/* snip ... myTime is now initialized to something */

memset(&myTime, 0, sizeof(timeval)); // Reinitialized to zero

答案 4 :(得分:-1)

您可以使用memset,然后您也可以将任何特定于平台的成员归零。