使用typedef进行语法解释

Syntax explanation using typedef

本文关键字:语法 解释 typedef 使用      更新时间:2023-10-16

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

这是过去遗留下来的。16位Windows代码具有近指针和远指针。我认为这是为了区分段间寻址和段内寻址,但内存已经衰退(很多)。

我实际上不知道什么是远指针,所以我只想把你指向维基百科。正如马塞洛所说,它似乎已经过时,是一种遗留技术。

请参阅维基百科的文章。

此外,取自编程论坛(此链接到daniweb线程):

在80286的旧时代,有近(16位)和远(16:16=20/24位)指针。由于x86的16位特性,内存被划分为64k字节(16位)的段。地址总线支持20到24位(1-16MB),因此为了寻址更大的区域,段寄存器与16位指针组合以形成完整的地址。这种体系结构仍然存在于今天的阁楼上,但它已经成为一个非问题。Windows使用"平面"内存模型,其中所有段都指向同一位置,而不是16位偏移,而是32位偏移。FAR关键字在现代x86软件中已变得不必要。

这可能对这个特定的实现没有什么不同,但在不同的操作系统或体系结构上,他们可以使用它来定义额外的信息。在这种情况下,它可能用于远指针:

#define FAR far