gpt4 book ai didi

c - _PTR_ 背后的基本原理是什么?

转载 作者:太空狗 更新时间:2023-10-29 15:27:27 24 4
gpt4 key购买 nike

我正在使用一个源库,我对指针类型定义的规则不清楚:使用 _PTR_ 宏而不是 * .所以,所有的函数原型(prototype)和 typedef 看起来像:

extern FILE_PTR    _io_fopen(const char _PTR_, const char _PTR_);

我想知道这背后的基本原理是什么,因为对我来说这似乎过分了。

编辑

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

_io_strtod(char _PTR_, char _PTR_ _PTR_);

最佳答案

可能是为了兼容DOS而定义的

#ifdef DOS
#define _PTR_ far *
#else
#define _PTR_ *
#endif

far/near 关键字允许指针指向当前段内部/外部的内存,允许程序寻址超过 64 KiB 的内存,同时仍然保持16 位指针用于更快的代码/更少的内存使用。

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

typedef png_color FAR * png_colorp;
typedef png_color FAR * FAR * png_colorpp;

在大多数平台上,FAR#defined 变为空。

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

关于c - _PTR_ 背后的基本原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7472736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com