本文主要是介绍调用约定__cdecl、__stdcall和__fastcall,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
要点 | __stdcall | __cdecl | __fastcall |
适用场合 | Win API | C/C++、MFC的默认方式; 可变参数的时候使用; | 要求速度快 |
C编译修饰约定 | _functionname@number | _functionname | @functionname@number |
如函数int func(int a, double b) | _func@12, 其中12是参数的总字节数。 | _func | @func@12 |
应用场景 | 如果你的程序中没有涉及可变参数,最好使用__stdcall关键字 | 当我们遇到这样的函数如fprintf()它的参数是可变的,不定长的,被调用者事先无法知道参数的长度,事后的清除工作也无法正常的进行,因此,这种情况我们只能使用_cdecl。 | |
参数传递方式 | 右->左 | 右->左 | 左边开始的两个不大于4字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数自右向左压栈传送 |
清理栈方 | 被调用函数清理 | 调用者清理 | 被调用函数清理 |
这篇关于调用约定__cdecl、__stdcall和__fastcall的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!