C 使用 cdecl,我已经研究过它并从程序集中调用了它。感觉已经很好了,为什么要破坏兼容性呢?为什么需要另一个约定?
最佳答案
因为具有相同的调用约定没有任何优势。 Go 代码和 C 代码不能直接相互调用,即使调用约定相同,因为 Go 使用拆分堆栈。
OTOH,这在 gccgo 中很有意义,因为 gcc 支持某些架构的 C 拆分堆栈。而且,IIRC,调用约定是因为兼容。 (更多 details here .)
免责声明:我从未真正使用过 gccgo。
关于go - 为什么 go 的编译器 "gc"使用与 C 不同的调用约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735439/