Share via


Konvensi Passing dan Penamaan Argumen

Khusus Microsoft

Pengkompilasi Microsoft C++ memungkinkan Anda menentukan konvensi untuk meneruskan argumen dan mengembalikan nilai antara fungsi dan pemanggil. Tidak semua konvensi tersedia di semua platform yang didukung, dan beberapa konvensi menggunakan implementasi khusus platform. Dalam kebanyakan kasus, kata kunci atau sakelar kompilator yang menentukan konvensi yang tidak didukung pada platform tertentu diabaikan, dan konvensi default platform digunakan.

Pada platform x86, semua argumen diperlebar menjadi 32 bit ketika diteruskan. Nilai pengembalian juga dilebarkan menjadi 32 bit dan dikembalikan dalam register EAX, kecuali untuk struktur 8-byte, yang dikembalikan dalam pasangan register EDX:EAX. Struktur yang lebih besar dikembalikan dalam register EAX sebagai pointer ke struktur pengembalian tersembunyi. Parameter didorong ke tumpukan dari kanan ke kiri. Struktur yang bukan POD tidak akan dikembalikan dalam register.

Compiler menghasilkan kode prolog dan epilog untuk menyimpan dan memulihkan register ESI, EDI, EBX, dan EBP, jika digunakan dalam fungsi.

Catatan

Ketika struct, union, atau class dikembalikan dari fungsi menurut nilai, semua definisi jenis harus sama, jika tidak, program mungkin gagal pada runtime.

Untuk informasi tentang cara menentukan prolog fungsi dan kode epilog Anda sendiri, lihat Panggilan Fungsi Telanjang.

Untuk informasi tentang konvensi panggilan default dalam kode yang menargetkan platform x64, lihat Konvensi Panggilan x64. Untuk informasi tentang memanggil masalah konvensi dalam kode yang menargetkan platform ARM, lihat Masalah Migrasi ARM Common Visual C++.

Konvensi panggilan berikut didukung oleh pengkompilasi Visual C/C++.

Kata kunci Pembersihan tumpukan Pengoperasian parameter
__cdecl Pemanggil Mendorong parameter pada tumpukan, dalam urutan terbalik (kanan ke kiri)
__clrcall n/a Muat parameter ke tumpukan ekspresi CLR secara berurutan (kiri ke kanan).
__stdcall Penerima Panggilan Mendorong parameter pada tumpukan, dalam urutan terbalik (kanan ke kiri)
__fastcall Penerima Panggilan Disimpan dalam register, lalu didorong pada tumpukan
__thiscall Penerima Panggilan Didorong pada tumpukan; this pointer disimpan di ECX
__vectorcall Penerima Panggilan Disimpan dalam register, lalu didorong pada tumpukan dalam urutan terbalik (kanan ke kiri)

Untuk informasi terkait, lihat Konvensi Panggilan Usang.

END Khusus Microsoft

Baca juga

Konvensi Panggilan