gpt4 book ai didi

linux - BSD 套接字头

转载 作者:行者123 更新时间:2023-12-03 11:58:41 25 4
gpt4 key购买 nike

具有 '__P' 的 socket.h BSP header 为

int bind __P((int, const struct sockaddr *, socklen_t))


你能告诉我这里的“__P”是什么意思吗?非常感谢!

最佳答案

这是一个可移植性黑客。 K&R C(C 之前的版本被 ANSI 和 ISO 标准化)没有在括号中声明带有类型和命名参数的函数。因此,这个声明需要在 K&R C 上是这样的:

int bind();
这在标准C上:
int bind(int, const struct sockaddr *, socklen_t);
__P宏旨在掩盖这些差异,并允许编译器根据 __STDC__ 的存在生成适当的原型(prototype)。指定标准 C 的宏。
请注意,C 在 1989 年被 ANSI 标准化,在 1990 年被 ISO 标准化,并且从那时起经历了几次修订,最显着的是在 1999 年和 2011 年。几乎不可能有人仍在现代系统上使用 K&R C 编译器,因为许多架构,它们在相关操作系统中的支持只出现在支持标准 C 的编译器中。而且,大多数人使用的系统是在过去 30 年中升级或构建的。
然而,一些非常古老的软件可能是用 K&R C 编写的,因此,这种技术允许这样的代码工作。但是,此类代码的生命周期必然是有限的,因为最新版本的 GCC 和 clang 不再支持 K&R C,因此找到旧的编译器可能会很棘手。

关于linux - BSD 套接字头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65067564/

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