我想知道FAR
和FAR *
之间的区别
这个函数来自 WinSock 。
int PASCAL FAR connect (SOCKET s, const struct sockaddr FAR * name, int len);
答案 0 :(得分:4)
您可以安全地忽略FAR
关键字,因为它们不再使用。
很久以前,在Win16时代,有16位指针(NEAR
)和32位指针(FAR
)。他们的处理方式不同,在某些情况下并不简单。自Win32开始以来,这种差异已经消失了。 Win64也没有使用分段内存模型。
同时,在硬件级别,这些网段仍然存在于英特尔架构中。但是这些细节完全被Windows用户模式程序员(以及内核模式驱动程序编写者)隐藏。
您仍然可以在头文件中找到这些关键字,因为它们不会伤害任何人。
答案 1 :(得分:3)
在这两种情况下,当在代码存储模型中使用此代码时,它们会修改指针的大小。 const struct sockaddr FAR * name
表示名称将是32位指针。 int PASCAL FAR connect
表示任何指向connect函数的指针都是32位指针。替代方案是NEAR
,这意味着指针是16位。
但自从Windows 3.1以来,没有人使用过分段内存模型。他们太老了我甚至不确定我是否使用了正确的术语。他们太老了,我打赌这里的一半以上的常客都不会听说过他们。所以我想我可以自信地说你可以忽略对FAR的任何使用,只是假装它不存在。
你在哪里看到这个?