12 winapi
当我far
第一次偶然发现限定符时,我正在阅读一些代码,现在我觉得为什么这些曾经被使用过了.但是我们现在使用的内存模型为什么这些甚至已经存在?人们是否真的在实践中使用这些,或者他们只是作为过去的饰品?
使用typedef BOOL near *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;
Run Code Online (Sandbox Code Playgroud)
编辑:第一评论使得一个好点过,这是什么意思了,如果far
和near
被定义为没有?
// WinDef.h: Lines 91-91
#define far
#define near
Run Code Online (Sandbox Code Playgroud)
Han*_*ant 15
微软承担着巨大的负担,他们尽一切努力使35年前编写的程序仍然可以在现代Windows版本上编译和运行.没有理智的公司会尝试如此愚蠢的事情,但这是他们成功的核心原因.一旦声明将其转换为Windows SDK标头,就会有一个非常非常好的理由再次将其删除.
是的,这确实意味着某些古老的16位C程序仍然可以维护和重新编译.哪个使用近远点指针,那是必要的.它在重新编译后仍然适用于32位和64位版本的Windows并非偶然.
这种反向比较也存在于像C这样的语言中.直到今天,字符串文字不是const char*
,只是char*
.是没有任何意义,但修复它会破坏方式太多了现有的方案.
是的,它们目前没有用于任何用途。
归档时间: |
|
查看次数: |
4966 次 |
最近记录: |