gpt4 book ai didi

c - struct epoll_event memset 还是没有 memset?

转载 作者:行者123 更新时间:2023-12-03 09:59:16 25 4
gpt4 key购买 nike

在互联网上浏览代码时,我经常看到这样的片段:

struct epoll_event event;
memset(&event, 0, sizeof(event));

如果事件填写完整,这种模式对我来说似乎是不必要的,但它很普遍。也许是为了考虑结构 future 可能发生的变化?

最佳答案

这肯定是糟糕的复制粘贴编码。 The man page for epoll没有记录对 epoll_event 结构进行零初始化的任何需要,并且在示例中也没有这样做。 future 对该结构的更改似乎是不可能的 (ABI),但如果是的话,契约(Contract)显然会忽略与您请求的 events 无关的结构的任何部分(甚至不读取,因为调用者可能正在传递指向未超出原始定义的存储的指针)。

此外,一般来说,当结构应该被零初始化时,使用 memset 充其量是没有意义的,最坏的情况是不正确/不可移植,因为零表示不需要是零值(对于指针和浮点类型)。如今,这种通用性主要是出于历史好奇,与 epoll 这样的 Linux 特定接口(interface)无关,但它也出现在 mbstate_t 中,它存在于完全通用的 C 中,并且需要零初始化才能正确使用关联的接口(interface)。对需要零值而不是全零字节表示的事物进行零初始化的正确方法是使用通用零初始化器 { 0 }

关于c - struct epoll_event memset 还是没有 memset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58769291/

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