go - 为什么 go 的编译器 "gc"使用与 C 不同的调用约定?

标签 go cdecl

C 使用 cdecl,我已经研究过它并从程序集中调用了它。感觉已经很好了,为什么要破坏兼容性呢?为什么需要另一个约定?

最佳答案

因为具有相同的调用约定没有任何优势。 Go 代码和 C 代码不能直接相互调用,即使调用约定相同,因为 Go 使用拆分堆栈。

OTOH,这在 gccgo 中很有意义,因为 gcc 支持某些架构的 C 拆分堆栈。而且,IIRC,调用约定是因为兼容。 (更多 details here .)

免责声明:我从未真正使用过 gccgo。

关于go - 为什么 go 的编译器 "gc"使用与 C 不同的调用约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735439/

相关文章:

c - 将参数从 C 传递给程序集?

c++ - 引用如何出现在可从 C 代码调用的函数的签名中?

c++ - __cdecl 强制前缀带下划线

可变参数函数的调用约定

c++ - 分离与合并由静态语言的数据库表制成的对象

dictionary - golang maps预留多少内存?

Gob 解码器抛出 EOF 错误一段时间然后停止

go - 通过 API 或 SDK 应用配置 yaml 文件

go - 有条件地定义变量

c++ - CDECL 调用约定导致奇怪的警告 ASSEMBLY X86