函数名和 类型之间的是什么 ?

qzgrmc 2003-06-26 01:36:52
对於 WIN32 的 程序入口, 为什么 可以是
int WINAPI winmain(....)
也 可以是 int CALLBACK winmain(....)
其中的 WINAPI和 CALLBACK 算什么? 在 C/C++中怎么没有提过
...全文
84 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wshcdr 2003-06-26
  • 打赏
  • 举报
回复
拜楼上~~~~
jiezhuang  2003-06-26
  • 打赏
  • 举报
回复
糾正一筆誤,__stdcall  自右向左壓棧,被調者清理棧

另外,在VC里,使用__fastcall,前兩個參數使用Register傳遞,其他仍然自右向左壓棧,也是被調者清理棧。

jiezhuang  2003-06-26
  • 打赏
  • 举报
回复
Aceece說的沒錯,補充如下

C/C++中主要定義了薩3種調用約定。
__cdecl 自右向左壓棧,調用者清理棧
__stdcall  自右向左壓棧,調用者清理棧
__fastcall 不使用棧,通過寄存器傳遞Parameter。

Microsoft的Win32 API定義的WINAPI, CALLBACK是這些關鍵字的宏。

#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall

Compiler可以指定缺省的調用約定,MS C Compiler中
/Gz - __stdcall
/Gr - __fastcall
/Gd - __cdecl
其中,__cdecl是默認的值。
zteliubin 2003-06-26
  • 打赏
  • 举报
回复
WINAPI和 CALLBACK 都被定义为了
FAR PASCAL
WINAPI Use in place of FAR PASCAL in API declarations. If you are writing a DLL with exported API entry points, you can use this for your own APIs.
CALLBACK Use in place of FAR PASCAL in application callback routines such as window procedures and dialog procedures.
Areece 2003-06-26
  • 打赏
  • 举报
回复
调用约定,包括调用栈的清理,压栈的顺序等
021850524 2003-06-26
  • 打赏
  • 举报
回复
WINAPI CALLBACK都被#define成了_stdcall,表示函数及参数在编译时是如何处理的.
你看看前几天有这么一个贴子.

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧