BSc*_*ker 7 c++ struct timeval
如何从time.h重新初始化timeval结构?
我意识到我可以将结构的两个成员重置为零,但是我还有其他方法可以忽略吗?
R..*_*R.. 12
完全正确且可移植(尽管是C99)的方式来零初始化任意(可能是聚合)类型:
myTime = (struct timeval){0};
Run Code Online (Sandbox Code Playgroud)
这甚至适用于包含指针和浮点成员的结构,即使实现不使用全零位作为空指针和浮点零的表示.
memset可能碰巧在您的平台上工作,但实际上不是推荐的(便携式)方法......
这是:
struct timeval myTime;
myTime = (struct timeval){ 0 };
Run Code Online (Sandbox Code Playgroud)
memset之所以有效,是因为struct timeval碰巧都具有零值,这些值由平台上的全零位模式表示。
但这不是规范所要求的。特别是,POSIX 不要求time_t类型为整数,并且 C 不要求将浮点零表示为全零字节。
使用初始化语法可以保证结构的字段被正确设置为零,无论它们是整型、浮点型、指针还是其他结构……即使这些东西在内存中的表示形式不是全零。但一般情况下情况并非如此memset。