8

我在一些 C 代码中看到了这一点:

Wininfo W = { sizeof(Wininfo) };

这到底是什么意思?

4

3 回答 3

15

此代码正在初始化struct使用时髦的 C 初始化程序语法以按声明顺序初始化每个字段,请参阅http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=421。在此示例的情况下,一个重要的副作用是其余字段未指定初始化为零的值。

这个技巧在 Win32 API 中是一个相对常见的技巧——API 需要预先设置大小作为指示客户端代码编译版本的一种方式——在许多这些情况下,还需要清除缓冲区,这通常会涉及在memset使用sizeof.

另请参阅C/C++ 编程语言的结构初始化?相关示例

于 2010-01-11T15:02:50.137 回答
9

这是一个初始化表达式W,将to的第一个字段sizeof(Wininfo)和其他字段设置为零。

于 2010-01-11T15:04:09.430 回答
5

首先,它不是声明,而是声明。声明不是 C 中的语句。

其次,这= { /* whatever */ }部分是一个初始化器——它指定了一个对象的初始值。通常,您使用包含在其中的初始化程序{}来初始化聚合对象:数组或结构。然而,C 语言的一个鲜为人知的特性是标量对象的初始化器也可以可选地包含在 中{},如

int i = { 5 };

您的具体声明的确切含义取决于Wininfo类型。如果W是一个聚合,那么它的第一个成员用sizeof(Wininfo)值初始化,其余的用零初始化。如果W是一个标量,那么它只是获取 的初始值sizeof(Wininfo)

于 2010-01-11T15:08:46.767 回答