const struct sockaddr FAR* name,
这是一个来自于分段内存结构时代的旧扩展。基本上意味着“这是一个指针,需要能够指向任何地址,而不仅仅是代码所在段中的内容。”
查看更多信息请访问维基百科页面。
far
在C语言中没有任何意义。请查看C99标准 [PDF],看看是否能找到有关far指针的提及。Far指针是为了支持分段内存模型而添加到针对8086/80286体系结构的编译器的扩展。
如果你没有使用16位x86编译器,它就不起作用。
如果你查看Win32头文件WinDef.h(在Visual Studio中,只需右键单击源代码中的FAR一词,然后选择“转到定义”即可),你会发现它是一个宏定义,定义为far
,而far
又被定义为什么都不是的宏!
它只是为了实现将旧的Win16源代码编译为Win32而存在。在16位x86编译器中,far
是一种编译器扩展关键字,用于支持seg::offset指针,这些指针解析为20位地址(16位x86仅有1MB地址空间!)。它们与16位near
指针不同,后者仅包括来自当前段的::offset。
far
或near
关键字。然而,东芝MeP的GNU编译器具有near
和far
,但不是出于与x86实模式相同的架构原因。因此,是的,一些体系结构仍需要扩展来处理不同的内存空间;不仅仅是near
和far
。哈佛体系结构和DSP通常需要扩展。 - Clifford