我的工作与源基地,以不清楚,我对指针类型定义规则:使用_ PTR _宏而不是*。所以,所有的函数原型和typedefs看起来像:_PTR_背后的理由是什么?
extern FILE_PTR _io_fopen(const char _PTR_, const char _PTR_);
我不知道可能是什么原因背后,因为对我来说这似乎过分。
编辑
顺便说一句,双间接,我发现:
_io_strtod(char _PTR_, char _PTR_ _PTR_);
我的工作与源基地,以不清楚,我对指针类型定义规则:使用_ PTR _宏而不是*。所以,所有的函数原型和typedefs看起来像:_PTR_背后的理由是什么?
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个昆明植物研究所,同时仍保持的16位指针的好处了更快的代码/使用更少的内存。
从定义中排除*
更为典型。例如,在libpng的,你可以看到的定义,如:
typedef png_color FAR * png_colorp;
typedef png_color FAR * FAR * png_colorpp;
在大多数平台上,FAR
将#defined
不了了之。
尽管DOS早已过去,但一些现代嵌入式架构也存在类似的问题。对于哈佛架构处理器来说,程序和数据存储器的指针必须使用不同的指令来访问,因此它们有不同的类型。其他处理器具有不同的“数据模型”,并且在2^24,2^16或2^8以下看到指针的特殊指针类型并不少见。
嗯,也许,但我可以看到的是它是#define _PTR_ *和部分与平台相关的特定代码(代码不适用于在DOS下构建,实际上这是在RTOS内部)。所以,他们可能希望将代码保存到远处(ha = ha)未来...... – pmod
@pmod:许多嵌入式体系结构都具有不同类型的指针,就像DOS一样,所以可以解释它。 –
我不认为这个答案是有道理的。如果你想让所有指针远离DOS,你可以使用大型/大型内存模型。如果你只希望SOME指针远,那么调用宏_PTR_'没有意义... –
这是一个好习惯轻松(对于足够小的定义容易)乘法和间接
int _PTR_ arr = malloc(42 * sizeof _PTR_ arr);
问得好区分。我真的很好奇,看看有没有人对这个问题有很好的回答。你是否也看到'__PTR__ __PTR__'双重间接? :S –
大声笑...也许程序员提出了这个问题,它有视觉问题,难以识别典型源文件中所有其他符号中的小星号。 – pmg
@Michael Mior哈哈 - 有:) – pmod