重新初始化timeval结构

BSc*_*ker 7 c++ struct timeval

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

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

R..*_*R.. 12

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

myTime = (struct timeval){0};
Run Code Online (Sandbox Code Playgroud)

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

  • @R。@Michael,是的,这个警告真的很烦人。我通常会关闭那个特定的开关。我什至认为,总的来说,这个警告确实具有误导性。该标准有一个明确的段落介绍了这种“扁平化”初始化程序如何工作。这是语言(设计者)想要的功能。该警告的作用只是表明只有很少的人使用初始化器。这只会适得其反。 (2认同)

Nem*_*emo 5

memset可能碰巧在您的平台上工作,但实际上不是推荐的(便携式)方法......

这是:

struct timeval myTime;

myTime = (struct timeval){ 0 };
Run Code Online (Sandbox Code Playgroud)

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

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

使用初始化语法可以保证结构的字段被正确设置为零,无论它们是整型、浮点型、指针还是其他结构……即使这些东西在内存中的表示形式不是全零。但一般情况下情况并非如此memset