我经历了一些代码,当我第一次偶然发现了这个限定词时,现在有理由为什么这些被使用.但是,随着记忆模型我们今天使用,为什么这些甚至已经到位了?人们在实践中是否真正使用这些,或者他们只是在过去的小饰品吗?
在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 *.没有任何意义,但修复它会打破太多现有的程序.