微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 *.没有任何意义,但修复它会打破太多现有的程序.

原文地址:https://www.jb51.cc/c/111034.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐