2013-03-31 30 views
7

C sử dụng cdecl, mà tôi đã xem xét và gọi với từ lắp ráp. Nó cảm thấy đủ tốt, vậy tại sao phá vỡ khả năng tương thích? Tại sao lại cần một quy ước khác?Tại sao trình biên dịch go "gc" sử dụng một quy ước gọi khác hơn C?

+0

Cho phép nhiều giá trị trả về và gc sử dụng ngăn xếp phân đoạn. Tôi không hoàn toàn chắc chắn, nhưng tôi sẽ không ngạc nhiên nếu các tính năng này có liên quan đến các quy ước gọi điện. Afaik, cách duy nhất để trả về nhiều giá trị với cdecl là trả về một con trỏ tới một cấu trúc. –

+6

C không sử dụng quy ước gọi điện CDMA. Một số triển khai sử dụng nó và một số sử dụng các quy ước gọi điện khác. – nos

+0

AFAIK việc triển khai Google của Go sử dụng quy ước gọi điện bằng với quy tắc của C ngoại trừ ở những nơi C không thể diễn tả khái niệm Sử dụng đi (chẳng hạn như khi có nhiều giá trị trả lại) – fuz

Trả lời

5

Vì không có lợi thế trong việc có cùng quy ước gọi điện. Mã Go và mã C không thể gọi trực tiếp cho nhau ngay cả khi quy ước gọi điện sẽ giống nhau vì Go sử dụng ngăn xếp chia nhỏ.

OTOH, nó có ý nghĩa trong gccgo, vì gcc hỗ trợ ngăn xếp chia C cho một số kiến ​​trúc. Và, IIRC, có quy ước gọi là vì nó tương thích. (Thêm details here.)

Tuyên bố từ chối: Tôi chưa bao giờ thực sự sử dụng gccgo.

Các vấn đề liên quan