什么是FAR PASCAL?

jma*_*erx 22 c c++ syntax

我想知道为什么在某些源代码中存在像FAR和PASCAL这样的宏.他们的意思和做法是什么?谢谢

DVK*_*DVK 20

  • PASCAL:它与调用约定有关.参数以从左到右的顺序(在cdecl的对面)被推入堆栈,并且被调用者负责在返回之前平衡堆栈.

    此调用约定在以下16位API中很常见:OS/2 1.x和Microsoft Windows 3.x. 关于它是否被Borland Delphi 1.x使用存在争议

  • FAR:在分段架构计算机中,远指针是包含段选择器的指针,使得可以指向当前段之外的地址.

为了完整性,FAR和PASCAL是预处理宏,当为16位系统编译时,它们扩展为声明调用约定和指针大小所必需的关键字.在32位系统上,它们通常会扩展为空(除非你有一个奇怪的默认调用约定).保留宏以实现向后兼容{hat/tip:来自Adrian McCarthy的评论}

  • 为了完整起见,`FAR`和`PASCAL`是预处理宏,当为16位系统编译时,它会扩展为声明调用约定和指针大小所必需的关键字.在32位系统上,它们通常会扩展为空(除非你有一个奇怪的默认调用约定).保留宏以实现向后兼容. (3认同)

Dev*_*olo 9

在这里记忆,

当堆内存被分段时,FAR可以回落到16位.NEAR数据的大小和速度有限,允许FAR更大但更昂贵.

据我所知,在32位的土地上,它是一个崩溃到没有的宏.

PASCAL是一个调用约定,也在16位日内大量使用.它已被stdcall取代.

两者都留下来以便向后兼容.


Mar*_*som 6

FAR已经过时; 它在16位代码中用于指示可以寻址整个地址空间的指针,而不仅仅是当前段的16位偏移量.

PASCAL是一个召集会议.正如维基百科所描述的:

参数以从左到右的顺序(在cdecl的对面)被推入堆栈,并且被调用者负责在返回之前平衡堆栈.

此调用约定在以下16位API中很常见:OS/2 1.x,Microsoft Windows 3.x和Borland Delphi版本1.x.