gpt4 book ai didi

winapi - WinDef.h为什么远近还在这里? C++

转载 作者:行者123 更新时间:2023-12-03 00:48:47 43 4
gpt4 key购买 nike

当我第一次偶然发现 far 限定符时,我正在查看一些代码,现在我明白为什么要使用这些限定符了。但是对于我们今天使用的内存模型,为什么这些仍然存在呢?人们在实践中是否真的使用了这些,或者它们只是作为过去的装饰品?

使用 typedef BOOL close *PBOOL;typedef BOOL far *LPBOOL; 之间有什么区别?

这些还有什么真正用途吗?或者我应该袖手旁观。

// WinDef.h ~Line 144
#undef FAR
#undef NEAR
#define FAR far
#define NEAR near
#ifndef CONST
#define CONST const
#endif

typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef float FLOAT;
typedef FLOAT *PFLOAT;
typedef BOOL near *PBOOL;
typedef BOOL far *LPBOOL;
typedef BYTE near *PBYTE;
typedef BYTE far *LPBYTE;
typedef int near *PINT;
typedef int far *LPINT;
typedef WORD near *PWORD;
typedef WORD far *LPWORD;
typedef long far *LPLONG;
typedef DWORD near *PDWORD;
typedef DWORD far *LPDWORD;
typedef void far *LPVOID;
typedef CONST void far *LPCVOID;

编辑:第一条评论也提出了一个很好的观点,如果 farnear 被定义为空,这意味着什么?

// WinDef.h: Lines 91-91
#define far
#define near

最佳答案

微软背负着巨大的负担,他们千方百计地让35年前编写的程序仍然可以在现代Windows版本上编译和运行。任何理智的公司都不会尝试做这样愚蠢的事情,但这却是他们成功的核心原因。一旦声明进入 Windows SDK header ,就需要一个非常非常充分的理由再次将其删除。

是的,这确实意味着某个地方的一些古老的 16 位 C 程序仍然可以维护和重新编译。其中使用近指针和远指针,这在当时是必要的。重新编译后它仍然可以在 32 位和 64 位版本的 Windows 上运行并非偶然。

这种向后兼容也存在于 C 等语言中。直到今天,字符串文字还不是 const char*,而是 char*。毫无意义,但修复它会破坏太多现有程序。

关于winapi - WinDef.h为什么远近还在这里? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16814409/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com