我想了解为什么在 typedef 语法中使用 FAR ?
#define FAR
//some other instructions
//.....
//.....
typedef struct tagDEVICE_BUFFER_W
{
....
....
}DEVICE_BUFFER_W;
typedef DEVICE_BUFFER_W FAR * LPDEVICE_BUFFER_W; //Why FAR is used here?
如果我不使用下面提到的 FAR 怎么办?会有什么不同吗?
typedef DEVICE_BUFFER_W * LPDEVICE_BUFFER_W;
答案 0 :(得分:5)
这是古代的遗产。 16位Windows代码有近距离和远距离指针。我认为这是区分段间和段内寻址,但内存已经消失(很多)。
答案 1 :(得分:3)
我实际上并不知道指针是什么,所以我只想指向维基百科。正如马塞洛所说,它似乎已经过时,是一种传统的技术/技术。
有关维基百科的文章,请参阅here。
此外,取自programming forum(此链接到daniweb线程):
在80286的旧时代,有近(16位)和远(16:16 = 20/24位)指针。由于x86的16位特性,内存被分成64k字节(16位)的段。地址总线支持20到24位(1-16MB),因此为了寻址更大的区域,段寄存器与16位指针组合以形成完整的地址。这种架构仍然存在于今天的Pentiums中,但它已成为一个无问题。 Windows使用“扁平”内存模型,其中所有段指向相同的位置,而不是16位偏移,有32位偏移。现代x86软件中不再需要FAR关键字。
答案 2 :(得分:1)
这可能对这个特定的实现没有什么影响,但是在不同的操作系统或体系结构上,他们可以使用它来定义额外的信息。在这种情况下,它可能用于far pointers:
#define FAR far