使用typedef的语法解释

时间:2012-01-12 06:17:34

标签: c++

我想了解为什么在 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;

3 个答案:

答案 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