Paul Eggert <[email protected]> writes:
> Here is that macro's implementation, in case you don't want to bother to
> look it up:
>
> /* With -Dlint, avoid warnings from gcc about code like mbstate_t m = {0,};
> by wasting space on a static variable of the same type, that is thus
> guaranteed to be initialized to 0, and use that on the RHS. */
> #define DZA_CONCAT0(x,y) x ## y
> #define DZA_CONCAT(x,y) DZA_CONCAT0 (x, y)
> #ifdef lint
> # define DECLARE_ZEROED_AGGREGATE(Type, Var) \
> static Type DZA_CONCAT (s0_, __LINE__); Type Var = DZA_CONCAT (s0_,
> __LINE__)
> #else
> # define DECLARE_ZEROED_AGGREGATE(Type, Var) \
> Type Var = { 0, }
> #endif
GCC also suppresses this warning if there are any designated
initializers, e.g.:
Type var = { .member = 0 };
One could thus do something like this:
#ifdef __GNUC__
#define ZERO_INITIALIZER(MEMBER) { .MEMBER = 0 }
#else
#define ZERO_INITIALIZER(MEMBER) { 0 }
#endif
Type var = { ZERO_INITIALIZER(member) };
It probably needs some refinement, but this looks nicer to me, at
least.
--
Ben Pfaff
http://benpfaff.org