c 的4種呼叫方式

2021-09-27 09:55:34 字數 2467 閱讀 4706

c預設的函式呼叫方法。

所以,引數由呼叫者維護,可變引數函式只能用此約定。

輸出函式名前會加上乙個下劃線字首。

c++標準呼叫方式。

函式編譯時必須確定並控制引數個數,否則返回出錯。

函式名格式:_funcname@引數位元組數

ecx和edx傳送兩個dword引數,其餘引數仍然用棧。

被呼叫者清棧,retn x

函式名格式:@funcname@引數位元組數

僅用於c++成員函式。__thiscall不是關鍵字,所以不能被程式設計師指定。

傳參和返回與stdcall一樣。只是this用ecx傳遞。

borland c++編譯器使用eax儲存this。

#include class c 

};void func_c(char arg)

void __stdcall func_std(char arg0, int arg1)

void __fastcall func_fast(char arg0, int arg1, int arg2, int arg3)

int main()

c c;

c.func();

009742d8 8d 4d f7 lea ecx,[c]

009742db e8 3e cd ff ff call c::func (097101eh)

func_c(1);

009742e0 6a 01 push 0

009742e2 e8 50 cd ff ff call func_c (0971037h)

009742e7 83 c4 04 add esp,4

func_std(1, 2);

009742ea 6a 02 push 2

009742ec 6a 01 push 1

009742ee e8 87 d0 ff ff call func_std (097137ah)

func_fast(3, 4, 5, 6);

009742f3 6a 06 push 6

009742f5 6a 05 push 5

009742f7 ba 04 00 00 00 mov edx,4

009742fc b1 03 mov cl,3

009742fe e8 81 d0 ff ff call func_fast (0971384h)

func_std彙編**:

void __stdcall func_std(char arg0, int arg1)

009718ee 5f pop edi

int a;

}009718ef 5e pop esi

009718f0 5b pop ebx

009718f1 8b e5 mov esp,ebp

009718f3 5d pop ebp

009718f4 c2 08 00 ret 8

func_fast彙編**

void __fastcall func_fast(char arg0, int arg1, int arg2, int arg3)

009718c6 5f pop edi

009718c7 5e pop esi

009718c8 5b pop ebx

009718c9 8b e5 mov esp,ebp

009718cb 5d pop ebp

009718cc c2 08 00 ret 8

如果沒有arg2和arg3的話,最後依據就是ret,而不是ret 8.

4種函式呼叫方式

lang en charset utf 8 head 1.函式執行模式 function add a,b add 1,2 this等於window 2.物件方法的呼叫模式 function cat var c new cat c.show 物件呼叫自己的方法 this指向c物件 所有的事件響應方法都...

javascript函式呼叫的4種方式

this關鍵字,指代函式執行時的當前物件 1,作為乙個函式呼叫 function myfunction a,b myfunction 3,4 12 當前的this,是全域性的,屬於window物件,window.myfunction 12 這種常用的方式,但是不是良好的程式設計習慣,全域性變數,方法...

C 遍歷容器的4種方式

定義乙個map用來演示本次的遍歷 std maptest test.insert std make pair 1,test test.insert std make pair 2,product 方式1 利用迭代器 iterator顯示宣告 for std map iterator iter tes...