当前位置:  开发笔记 > 编程语言 > 正文

涉及{}的C代码

如何解决《涉及{}的C代码》经验,为你挑选了3个好方法。

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

Wininfo W = { sizeof(Wininfo) };

这到底意味着什么?



1> Ruben Bartel..:

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

这个技巧在Win32 API中是一个相对常见的技巧 - API需要预先设置大小,以指示客户端代码编译的版本 - 在许多情况下,还需要清除缓冲区,这通常涉及单独调用,例如memset在用大小字段初始化大小字段之前sizeof.

另请参见C/C++编程语言的struct初始化?相关的例子



2> sth..:

它是一个初始化表达式,它将Wto 的第一个字段sizeof(Wininfo)和其他字段设置为零.



3> AnT..:

首先,它不是声明,而是声明.声明不是C语句.

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

int i = { 5 };

您的具体声明究竟意味着什么取决于什么Wininfo类型.如果W是聚合,则使用sizeof(Wininfo)值初始化其第一个成员,并使用零初始化其余成员.如果W是标量,那么它只是获得初始值sizeof(Wininfo).

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有