gpt4 book ai didi

sockets - 我们是否需要同时包含 header ?它们之间有什么区别?

转载 作者:行者123 更新时间:2023-12-02 17:14:54 26 4
gpt4 key购买 nike

其中一个不会让另一个可见吗?它们之间有什么区别以及何时使用什么?我的教授为我提供了一个入门代码,他使用了 <netinet/in.h>在服务器套接字和 <arpa/inet.h>在客户端中。这有什么原因吗?

最佳答案

这是 C 库中的常见模式: header A 定义了一些内容, header B 定义了一些内容,但是 header A 还需要 header B 中的一些内容,因此它自己包含 B。

因此,如果您仅包含 header A,即使您使用 header B 中的内容,您的代码仍然会编译。 arpa/inet.h 包括 netinet/似乎就是这种情况在.h。所以不,您“不需要”同时包含两者。

但是

尽管包含 A 可能会包含 B 作为副作用,但这实际上只是一个实现细节,并且可能不是 header 所保证的。换句话说,您的代码可能在您的计算机上编译良好,但无法在 header 实现略有不同的另一台符合标准的计算机上编译。

另一种可能会困扰您的情况是代码重构。接下来,您可能会以某种方式重组,使您的代码不再调用 inet_addrarpa/inet.h 中的其他任何内容。 “哦,我现在可以删除那个标题了!”您可能会认为...只是您的代码停止编译,因为您仍在某处使用 sockaddr_in 并且从未直接包含 netinet/in.h

(您需要阅读文档以了解标准保证 header 提供的内容: arpa/inet.hnetinet/in.h )

或者也许一些可怜的新手几年后正在查看您的代码以寻求指导。他们对这种网络魔法一无所知,当他们看到 INADDR_BROADCASTsa_family_t 时,他们感到非常困惑。因为这些符号被定义为 arpa/inet.h 的特定于实现的副作用!

所以,再次强调,您“不需要”同时包含两者。但无论如何,这样做都是个好主意。

关于sockets - 我们是否需要同时包含 <netinet/in.h> 和 <arpa/inet.h> header ?它们之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46496363/

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