C code involving {}
I saw this in some C code:
Win开发者_高级运维info W = { sizeof(Wininfo) };
What the heck does this mean?
This code is initializing a struct
using funky C initializer syntax to initialize each field in order of declaration, see http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=421. An important side-effect in the case of this example is that remaining fields one doesnt specify values for get initialized to zeros.
This trick is a relatively common one in Win32 APIs - the API requires the size to be pre-set as a way of indicating the version the client code is compiled against - in many of these cases, one is also expected to clear the buffer, which would ordinarily involve a separate call to e.g. memset
prior to initializing the size field with the sizeof
.
See also Struct initialization of the C/C++ programming language? for related examples
It's an initializer expression that sets the first field of W
to sizeof(Wininfo)
and the other fields to zero.
Firstly, it is not a statement, it is a declaration. Declarations are not statements in C.
Secondly, the = { /* whatever */ }
part is an initializer - it specifies the initial value of an object. Normally you use initializers enclosed in {}
to initialize aggregate objects: arrays or structs. However, a little-known feature of C language is that initializers of scalar objects can also be optionally enclosed in {}
, as in
int i = { 5 };
What exactly your specific declaration means depends on what Wininfo
type is. If W
is an aggregate, then its first member is initialized with sizeof(Wininfo)
value and the rest is initialized with zeroes. If W
is a scalar, then it just gets the initial value of sizeof(Wininfo)
.
精彩评论