C function prototype นี่
ถ้าใช้ compiler ต่างกัน, มันจะไม่ compat กันป่าว?
เช่น compiler แต่ละตัว อาจกำหนดให้ค่าที่ return จาก function เก็บไว้ใน register ต่างกัน.
ทีนี้ caller จะรู้ได้ไงว่า obj ของ function นี้ ถูก compile ด้วย compiler ตัวไหน.
caller จะได้รู้ว่าจะดึงค่า return จาก register ไหน.
ดังนั้น มันไม่น่าจะ compat กันได้.
----
อานนท์
กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น
ค่าที่ส่งผ่านในการเรียกฟังก์ชันไม่ได้อยู่ใน register ครับ แต่จะไปอยู่บน stack แทน
แต่ก็มีความเป็นไปได้ที่จะไม่เหมือนกัน เช่น
เป็นหน้าที่ของโปรแกรมเมอร์ที่จะต้องเช็คให้ตรงกันนะ
ปกติ ค่า argument น่าจะมี standard ที่เรียงเหมือนกัน.
__stdcall น่าจะหมายถึงให้เรียงตาม standard.
เอ๋, แล้ว __cdecl คืออะไรเนี่ย (C declaration?).
แต่ไม่รู้ว่าค่าที่ return จาก function มันจะเก็บไว้ในไหน, ไม่รู้ว่ามันมี standard รึเปล่า.
เท่าที่ดูจาก asm ที่ gcc ทำออกมา, มันเก็บไว้ใน register EAX (32 bit), EAX+EDX (กรณี 64 bit))
กรณีนี้ พูดถึง platform เดียวกัน, เพราะ object code (*.o) ไม่น่าจะไว้สำหรับข้าม platform.
----
อานนท์
ลองดูที่นี่นะครับ
อ่อ, stdcall คือ standard ของ win32 api.
ส่วน cdecl คือ แบบที่ C/C++ ส่วนใหญ่บน x86 ใช้กัน.
ขอบคุณมากครับ.
----
อานนท์.
prototype คืออะไรอะครับ?
ที่อยู่ใน header, เค้าเรียกว่า function prototype.
----
อานนท์