_PTR_背后的理由是什么?

pmo*_*mod 4 c pointers design-consideration

我正在使用源代码库,对我的指针类型定义规则不明确:使用_ PTR _ macro而不是*.所以,所有的函数原型和typedef看起来像:

extern FILE_PTR    _io_fopen(const char _PTR_, const char _PTR_);
Run Code Online (Sandbox Code Playgroud)

我想知道这背后的理由是什么,因为对我来说这似乎过分了.

编辑

顺便说一句,对于双重间接我发现:

_io_strtod(char _PTR_, char _PTR_ _PTR_);
Run Code Online (Sandbox Code Playgroud)

Die*_*Epp 6

该定义可能与DOS兼容.

#ifdef DOS
#define _PTR_ far *
#else
#define _PTR_ *
#endif
Run Code Online (Sandbox Code Playgroud)

far/ near关键字允许指针来解决内存内/当前段外,允许程序解决内存超过64个昆明植物研究所,同时仍保持的16位指针的好处了更快的代码/使用更少的内存.

*从定义中排除更典型.例如,在LibPNG中,您可以看到如下定义:

typedef png_color FAR * png_colorp;
typedef png_color FAR * FAR * png_colorpp;
Run Code Online (Sandbox Code Playgroud)

在大多数平台上,FAR都将#defined一事无成.

虽然DOS早已过去,但一些现代嵌入式架构也有类似的问题.对于哈佛架构处理器,必须使用不同的指令访问指向程序和数据存储器的指针,因此它们具有不同的类型.其他处理器具有不同的"数据模型",并且看到指针的特殊指针类型低于2 ^ 24,2 ^ 16或2 ^ 8并不罕见.