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

我经历了一些代码,当我第一次偶然发现了这个限定词时,现在有理由为什么这些被使用.但是,随着记忆模型我们今天使用,为什么这些甚至已经到位了?人们在实践中是否真正使用这些,或者他们只是在过去的小饰品吗?

在PBOOL附近使用typedef BOOL甚至会有什么区别?和typedef BOOL远* 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;

编辑:第一个评论也是一个好点,这是什么意思,如果远近近被定义为无?

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

解决方法

Microsoft承担了巨大的负担,他们竭尽全力使35年前编写的程序仍然在现代Windows版本上编译和运行.没有一个理智的公司会尝试像这样愚蠢的事情,但它们是成功的核心原因.一旦声明成为Windows SDK标头,它需要一个非常非常好的理由才能再次删除它.

是的,这确实意味着一些古老的16位C程序仍然可以维护和重新编译.哪个使用近和远的指针,那是必要的.在重新编译后,它仍然适用于32位和64位版本的Windows,这并不意外.

这种反向兼容以C语言存在.到目前为止,字符串字面值不是const char *,只是char *.没有任何意义,但修复它会打破太多现有的程序.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...