- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
其中一个不会让另一个可见吗?它们之间有什么区别以及何时使用什么?我的教授为我提供了一个入门代码,他使用了 <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_addr
或 arpa/inet.h
中的其他任何内容。 “哦,我现在可以删除那个标题了!”您可能会认为...只是您的代码停止编译,因为您仍在某处使用 sockaddr_in
并且从未直接包含 netinet/in.h
。
(您需要阅读文档以了解标准保证 header 提供的内容: arpa/inet.h 、 netinet/in.h )
或者也许一些可怜的新手几年后正在查看您的代码以寻求指导。他们对这种网络魔法一无所知,当他们看到 INADDR_BROADCAST
和 sa_family_t
时,他们感到非常困惑。因为这些符号被定义为 arpa/inet.h 的特定于实现的副作用!
所以,再次强调,您“不需要”同时包含两者。但无论如何,这样做都是个好主意。
关于sockets - 我们是否需要同时包含 <netinet/in.h> 和 <arpa/inet.h> header ?它们之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46496363/
即使在尝试了头文件包含的所有顺序之后,我仍然收到 netinet/in.h 的错误 /usr/include/netinet/in.h:34: error: expected identifier b
我已经尝试了一段时间从 TCP 数据包 header 获取偏移值,并不断获取值 0。这是我的代码所基于的 header 文件的链接: http://unix.superglobalmegacorp.c
[套接字编程] [UDP 服务器] 我正在尝试使用 UDP 服务器进行消息加密和解密。 代码在这里:https://www.geeksforgeeks.org/message-encryption-d
中定义了一长串协议(protocol): /* * Protocols (RFC 1700) */ #define IPPROTO_IP 0
我无法将其包含在我的任何文件中。编译的时候总是失败。我安装了 lksctp-tools 软件包。 我运行 gcc -Wall -lsctp -o client admin.c deseria
我最终遇到了与 Getting started with gnulib on MinGW and not familiar (enough) with autotools 相同的问题- 也就是说,想要
据我观察,这两个库都包含超过 90% 完全相同的代码。当我在我的示例程序中声明它们时,没有魔法发生。我真的不明白这些库的区别,即使它们位于单独的目录中。有人可以为我分解吗? 加上:我尝试在 sys/s
尝试使用 struct ip 时,VSCode 报告 incomplete type is not allowed 错误。我知道这是 intellisense 的问题,因为我的程序使用 gcc mon
在我的其中一个代码中,我面临以下错误,因为我使用的是 。 ========== 错误======== /auto/andpkg/rep_cache//wr-x86-xeon/5.0/sysroot/i
我正在尝试使用没有文档的 peertalk 框架。在他们的 obj-c 示例中,他们使用了 INADDR_LOOPBACK 宏,并且示例正在运行。但是当我尝试快速执行相同操作时,系统会抛出一个 Unr
我正在尝试使用在 2.6.37 中添加到 linux 的 TCP 选项 TCP_USER_TIMEOUT。 显然我的 C 源代码包括 netinet/tcp.h 而不是 linux/tcp.h。 TC
我正在尝试编译(使用 cygwin)一个包含 netinet/ether.h 的 C 头文件。在 Linux 上我可以编译头文件,但在 Windows 上它找不到 netinet/ether.h。包含
我按顺序包含了 netinet/in.h 和 netinet6/in6.h。这工作了几个月。现在我得到一个编译器错误,in6.h 中的类型被重新定义,因为 in.h 还包括 in6.h。我检查了 in
其中一个不会让另一个可见吗?它们之间有什么区别以及何时使用什么?我的教授为我提供了一个入门代码,他使用了 在服务器套接字和 在客户端中。这有什么原因吗? 最佳答案 这是 C 库中的常见模式: head
我是 C 编程中的新网络套接字。我正在尝试制作一个简单的服务器 - 客户端。以下是我想要的: ... //Binding to a port struct sockaddr_in name; name
我目前正在用 C 语言构建一个跨平台库,它可以处理 IP 地址。所以我想我可以使用类型 in_addr和 in_addr6来表示这些值,因为它们看起来非常便携。 但它看起来像 in_addr6 中未
我正在处理的项目有以下内容 #include #include #include #include #include #include #include #include #ifdef
我是一名优秀的程序员,十分优秀!