涉及 {} 的 C 代码

标签 c curly-braces static-initializer

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

Wininfo W = { sizeof(Wininfo) };

这到底是什么意思?

最佳答案

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

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

另见 Struct initialization of the C/C++ programming language?相关例子

关于涉及 {} 的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2042577/

相关文章:

C:在字典中搜索字符串

c - 字段的 __attribute__((packed)) 如何影响包含该字段的结构?

c++ - 容器std::array的列表初始化需要双括号

visual-studio-2008 - 转到 Visual Studio 中的匹配大括号吗?

具有(和不具有)混合静态构造函数的 C# 静态初始化器

c - 对数组使用 calloc 的正确方法是什么?

c - 防止 GTK 应用程序的多个实例

emacs - 在swank-clojure repl中模仿花括号匹配

java - 如何强制初始化一个类?

c++ - 在 C++ 中初始化类的静态数组成员的更好方法(尽管首选 const)