我在一些C代码中看到了这个:
Wininfo W = { sizeof(Wininfo) };
这到底意味着什么?
此代码初始化struct
使用funky C初始化程序语法按声明顺序初始化每个字段,请参阅http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=421.在这个例子的情况下,一个重要的副作用是剩下的字段不指定get初始化为零的值.
这个技巧在Win32 API中是一个相对常见的技巧 - API需要预先设置大小,以指示客户端代码编译的版本 - 在许多情况下,还需要清除缓冲区,这通常涉及单独调用,例如memset
在用大小字段初始化大小字段之前sizeof
.
另请参见C/C++编程语言的struct初始化?相关的例子
它是一个初始化表达式,它将W
to 的第一个字段sizeof(Wininfo)
和其他字段设置为零.
首先,它不是声明,而是声明.声明不是C语句.
其次,该= { /* whatever */ }
部分是初始化器 - 它指定对象的初始值.通常使用封装的{}
初始化程序来初始化聚合对象:数组或结构.但是,C语言的一个鲜为人知的特性是标量对象的初始化器也可以选择性地包含在其中{}
,如
int i = { 5 };
您的具体声明究竟意味着什么取决于什么Wininfo
类型.如果W
是聚合,则使用sizeof(Wininfo)
值初始化其第一个成员,并使用零初始化其余成员.如果W
是标量,那么它只是获得初始值sizeof(Wininfo)
.