开发者

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).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜