回答 1:
你是想问为啥 Windows C++ 中全是 stdcall 或 WINAPI, 而不是 cdecl 的 calling convention 吧? 原因简单直接, 生成执行码小 WINAPI 就是 stdcall 的一个宏定义, 其实是一回事 stdcall 约定是被调用者清栈, 返回时指令带一个退栈参数就可以了, 被调用者自己一句 ret n 就完事了 cdecl 约定是调用者清栈, 就是每一个调用者在函数调用完成后, 要每一个调用者自己去拉 esp 把栈状况改回来 stdcall 的缺点就是无法支持可变数量的参数, 因为被调用者必须确定参数数量才能自己清栈我印象中老 Win32 API 只有一个 API 支持变长参数, 所以只有她是 cdel 而不是 stdcall, 来自 user32 的 wsprintf
发布于 2015-06-2046?12
回答 2:
省点内存呗, 栈顶指针弹回这个指令, 只需要函数实现一下, 而不需要每一次调用结束都去实现一下当年从 dos640k 时代走出来的那堆微软程序员, 对于节省内存有各种变态手段启动阶段想方设法不加载 com 组件, 实在扛不住了就做一个超级精简版 com 更不用说 MFC 里面的各种变态省内存方法了
发布于 2015-06-29
综上所述:
__stdcall 被调用者清理堆栈, 生成执行代码小, 节省内存 缺点: 不支持可变参数 windows api 使用__stdcall 是历史问题
来源: http://www.bubuko.com/infodetail-2499485.html