7
C使用cdecl,我已經查看並從程序集中調用。感覺不錯,爲什麼要打破兼容性?爲什麼需要另一個公約?爲什麼Go的編譯器「gc」使用與C不同的調用約定?
C使用cdecl,我已經查看並從程序集中調用。感覺不錯,爲什麼要打破兼容性?爲什麼需要另一個公約?爲什麼Go的編譯器「gc」使用與C不同的調用約定?
因爲使用相同的調用約定沒有優勢。即使在調用約定相同時,Go代碼和C代碼也不能直接調用對方,因爲Go使用拆分堆棧。
OTOH,它在gccgo中有意義,因爲gcc支持某些體系結構的C拆分堆棧。而且,IIRC,那裏的調用約定是因爲兼容。 (更多details here。)
聲明:我從未使用過gccgo。
Go允許多個返回值,gc使用分段堆棧。我不完全確定,但如果這些功能與調用約定相關,我不會感到驚訝。 Afaik,用cdecl返回多個值的唯一方法是返回一個指向結構體的指針。 – 2013-03-31 22:50:02
C不使用cdecl調用約定。有些實現使用它,有些使用其他調用約定。 – nos
AFAIK Go的Google實現使用的調用約定與C的調用約定相同,但在C無法表達Go使用的概念的地方(例如有多個返回值時) – fuz