国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

關于函數調用方式__stdcall和__cdecl詳解

2020-01-26 14:25:36
字體:
來源:轉載
供稿:網友

關于函數調用方式__stdcall和__cdecl詳解

__stdcall

__cdecl

兩者的相同點與不同點

實例

__stdcall

__stdcall的全稱是standard call。是C++的標準調用方式。

函數參數的入棧順序為從右到左入棧。函數返回時使用retn x指令,其中x為調整堆棧的字節數。這種方式叫做自動清棧。即被調用的函數的參數個數是固定的,調用者必須嚴格按照定義傳遞參數,一個不多,一個不少。

__cdecl

__cdecl的全稱是C Declaration,即C語言默認的函數調用方式。

函數參數的入棧順序為從右到左入棧。函數返回時作用ret指令。由調用者手動清棧。被調用的函數支持可變參數。調用者根據調用時傳入參數的個數,手動平衡堆棧。

兩者的相同點與不同點

相同點

參數入棧順序相同:從右到左

不同點

堆棧平衡方式不同:__stdcall自動清棧,__cdecl手動清棧。

返回指令不同:_stdcall使用retn x, __cdecl使用ret

編譯后函數的修飾名不同: 假設有函數int foo(int a, int b), 采用__stdcall編譯后的函數名為_foo@8,而采用__cdecl編譯后的函數名為_foo。

實例

支持可變參數的函數必須定義為__cdecl,如:

int printf(char *fmt, ...);

在windef.h中對__stdcall和__cdecl的定義

 #define CALLBACK   __stdcall #define WINAPI    __stdcall #define WINAPIV   __cdecl #define APIENTRY   WINAPI #define APIPRIVATE  __stdcall #define PASCAL    __stdcall #define cdecl _cdecl #ifndef CDECL #define CDECL _cdecl #endif

以上就是小編為大家帶來的關于函數調用方式__stdcall和__cdecl詳解的全部內容了,希望對大家有所幫助,多多支持武林網~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 东丽区| 平湖市| 阿拉善左旗| SHOW| 大英县| 泾川县| 江安县| 开鲁县| 大宁县| 海晏县| 新宁县| 科技| 嘉义县| 平罗县| 喀喇沁旗| 淮阳县| 汝阳县| 洛宁县| 舟曲县| 伽师县| 蒲江县| 双牌县| 新安县| 玛曲县| 新河县| 大英县| 遂昌县| 来凤县| 张家港市| 乐亭县| 平昌县| 泽库县| 彰化县| 怀仁县| 河曲县| 额济纳旗| 南江县| 阿克苏市| 东阿县| 黄陵县| 营山县|