c - 应用程序二进制接口(interface)困惑

标签 c compilation pascal abi

我知道这里有很多关于 ABI 的问题,但我仍然没有完全理解它。

最近有人告诉我,当人们过去编写 Pascal 然后 C 变得更流行时,会出现问题或混淆,因为编译时 Pascal 会以与 C 相反的顺序将函数参数压入堆栈。我质疑那不应该取决于目标平台而不是程序语言。确定这一点的不是 ABI 吗? ABI 不是由操作系统开发人员开发的,不依赖于编程语言吗?

抱歉,如果问题很长。这只是我无法理解的事情。我试图完全理解幕后发生的事情,而不仅仅是能够编写代码。在此先感谢您的帮助。

最佳答案

ABI 不是操作系统供应商的垄断。程序可以作为固件部署,甚至操作系统也是程序的集合。因此,正如您所建议的那样,调用约定可以被视为 ABI 规范的一部分,由 HLL 的编译工具链供应商(或汇编语言的程序员)选择。对于通过操作系统使用的计算机,开发应用程序的开发人员需要将他们的程序与操作系统库链接。如果这些库在作为操作系统的一部分部署时是使用一种调用约定构建的,那么编译器开关或其他此类机制会负责针对操作系统。因此,操作系统供应商在指定 ABI 方面有发言权。

关于c - 应用程序二进制接口(interface)困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30358914/

相关文章:

c - 如何在 Postgres 的 C 语言函数中返回位(n)或位变化(n)字段?

c - 比赛中的艰难循环

python - 使用Jython编译器编译Python 2.7代码

javascript - 从字符串用 node.js 编译 scss

Delphi if else if else 语句不起作用 "Type of expression must be BOOLEAN"

go - delphi/pascal <> golang (异或加密)

c++ - TCMalloc - 获取指针的分配大小

c - 转换为 void 指针时,表达式必须是指向完整对象类型的指针

compilation - 你怎么知道库名是什么

java - 非 C 项目的跨平台自动构建