Memahami Konvensyen Panggilan dalam C/C
Konvensyen panggilan mentakrifkan cara fungsi lulus dan menerima hujah serta nilainya. C/C menawarkan pelbagai konvensyen panggilan, masing-masing mempunyai tujuan tertentu.
Bilangan Konvensyen Panggilan
Terdapat beberapa konvensyen panggilan tersedia dalam C/C , termasuk:
- cdecl
- syscall
- pascal
- stdcall
- fastcall
- vectorcall
Konvensyen Panggilan Microsoft X64-
Maksud Setiap Konvensyen
cdecl:
Argumen dihantar pada tindanan.- Pendaftar ditetapkan untuk tujuan tertentu (EAX untuk nilai pulangan, EAX, ECX, EDX untuk disimpan pemanggil).
-
syscall:
Serupa dengan cdecl tetapi tidak mengekalkan daftar tertentu.-
pascal:
Parameter dihantar pada tindanan dalam susunan kiri ke kanan.- Pemanggil yang bertanggungjawab untuk pembersihan tindanan.
-
stdcall:
Callee membersihkan timbunan.- Parameter ditolak dalam tertib kanan ke kiri, seperti cdecl.
- Daftar yang ditetapkan untuk kegunaan fungsi dalaman (EAX, ECX, EDX).
-
panggilan pantas:
Dua argumen pertama diluluskan dalam daftar (ECX dan EDX).- Baki argumen ditolak pada timbunan kanan-ke- kiri.
-
panggilan vektor:
Menyokong menghantar argumen vektor menggunakan daftar SIMD.- Sehingga enam daftar diperuntukkan untuk argumen vektor .
-
safecall (Delphi/Free Pascal):
Merangkumi pengendalian ralat COM.- Pengecualian dikembalikan dalam EAX sebagai HRESULT, sementara hasilnya diluluskan melalui rujukan.
-
Konvensyen Panggilan Microsoft X64:
Digunakan dalam Windows dan pra-but UEFI.- Empat argumen integer/penunjuk pertama diluluskan dalam daftar (RCX, RDX, R8, R9).
-
Atas ialah kandungan terperinci Bagaimanakah Konvensyen Memanggil Membentuk Fungsi Hujah Melepasi dalam C/C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn