gpt4 book ai didi

c - 这行C是做什么的?

转载 作者:太空狗 更新时间:2023-10-29 17:09:04 26 4
gpt4 key购买 nike

我刚刚读到一个名为 sofia-sip 的图书馆这条线出现在 code sample :

msg_iovec_t iovec[2] = {{ 0 }};

作为引用,这里是 msg_iovec_t 的定义:

struct iovec {
void *iov_base; // Pointer to data.
size_t iov_len; // Length of data.
};

最佳答案

这会在堆栈上创建一个包含两个 iovec 结构的数组,并将两个数组元素的所有 成员初始化为零。

初始化程序 {{ 0 }} 只为第一个数组元素的第一个成员给出一个显式值:iovec[0].iov_base。提供的值 0 隐式转换为空指针。

第一个数组元素的其他成员和其他数组元素也被隐式初始化:指向 null 的指针和指向 0 的算术类型。

该行可以等价地写成

msg_iovec_t iovec[2] = { 0 };

这是对整个对象进行零初始化的最短标准方法,因此它是惯用的。一些编译器可能接受空的初始化列表 {} 作为扩展。一些编译器可能会针对这种形式发出警告,并需要足够的大括号来指定第一个非聚合成员(如原始行中的两对)。

效果类似

msg_iovec_t iovec[2];
bzero(iovec, sizeof iovec);

除了清洁和便携,因为用零字节填充的指针不一定是空指针。

关于c - 这行C是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com