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