There's also a way to do this without any user-defined functions that works in both C and C++:
struct tm tm_struct = { 0, };In ISO C++ and GNU C you can also omit the 0:
struct tm tm_struct = { };
Re:C Legacy Is Evil
by JoeAltmaier on Tuesday November 04, 2014 @04:42PM
(#8559216)
Does that work on char array members in the struct?
Yes, as far as I believe, this should always work in standard C89/C99. In the char array case, it works due to the brace elision rule in aggregates: assuming
struct foo { char bar[3]; };
These declarations are equivalent: struct foo f1 = { 0, };
struct foo f2 = { { 0, } };
template <class C> SPL_INLINE_FORCE void Zero(C &c) { memset(&c, 0, sizeof(c)); }
struct tm tm_struct;
Zero(tm_struct);