函式呼叫約定

2021-08-26 20:39:03 字數 705 閱讀 3035

在學習c語言的時候,總是碰到__cdecl,一直都只是知道他是一種函式呼叫約定,

今天來總結一下函式的呼叫約定~

函式呼叫約定

當乙個函式被呼叫時,函式的引數會被傳遞給呼叫的函式和返回值會被返回給呼叫函式。函式呼叫約定就是描述引數是怎麼傳遞和由誰平衡堆疊的,當然還有返回值。

1.__cdecl

1.引數是從右向左傳遞的,也是從右向左放在堆疊中的

2.堆疊平衡是由呼叫函式來執行的

3.函式的前面會加乙個字首_(_test)

2.__stdcall

1.引數是從右向左傳遞的,也是從右向左放在堆疊中的

2.堆疊平衡是由被呼叫函式來執行的

3.在函式名前加下劃線修飾,在函式名的後面由@來修飾並、加上棧需要的位元組數的空間(_test@8)

3.__fastcall

1.引數放在暫存器中,而不是棧中

2.最左邊的兩個不大於4個位元組的引數分別放在ecx和edx暫存器。當暫存器用完的時候,其餘引數仍然從右往左的順序壓棧。

4.__thiscall

1.c++成員函式的預設呼叫約定,用於限制成員函式

2.引數從右向左被推入堆疊

3.通過ecx暫存器來傳遞this指標,將其傳遞到x86結構上,而不是堆疊上

函式呼叫約定

函式呼叫約定有多種,這裡簡單說一下 1 stdcall 呼叫約定相當於16位動態庫中經常使用的 pascal 呼叫約定。在32位的vc 5.0中pascal呼叫約定不再被支援 實際上它已被定義為 stdcall。除了 pascal外,fortran和 syscall也不被支援 取而代之的是 stdc...

函式呼叫約定

函式呼叫約定1.stdcall是pascal程式的預設呼叫方式,通常用於win32 api中,函式採用從右到左的壓棧方式,自己在退出時清空堆疊。vc將函式編譯後會在函式名前面加上下劃線字首,在函式名後加上 和引數的位元組數。2 c呼叫約定 即用 cdecl關鍵字說明 按從右至左的順序壓引數入棧,由呼...

函式呼叫約定

1.stdcall是pascal程式的預設呼叫方式,通常用於win32 api中,函式採用從右到左的壓棧方式,自己在退出時清空堆疊。vc將函式編譯後會在函式名前面加上下劃線字首,在函式名後加上 和引數的位元組數。2 c呼叫約定 即用 cdecl關鍵字說明 按從右至左的順序壓引數入棧,由呼叫者把引數彈...