_stdcall,__cdecl的解惑

ifdef   _MAC  
  #define   CALLBACK         PASCAL  
  #define   WINAPI             CDECL  
  #define   WINAPIV         CDECL  
  #define   APIENTRY         WINAPI  
  #define   APIPRIVATE     CDECL  
  #ifdef   _68K_  
  #define   PASCAL             __pascal  
  #else  
  #define   PASCAL  
  #endif  
  #elif   (_MSC_VER   >=   800)   ||   defined(_STDCALL_SUPPORTED)  
  #define   CALLBACK         __stdcall  
  #define   WINAPI             __stdcall  
  #define   WINAPIV         __cdecl  
  #define   APIENTRY         WINAPI  
  #define   APIPRIVATE     __stdcall  
  #define   PASCAL             __stdcall  
  #else  
  #define   CALLBACK  
  #define   WINAPI  
  #define   WINAPIV  
  #define   APIENTRY         WINAPI  
  #define   APIPRIVATE  
  #define   PASCAL             pascal  
  #endif  
   
  _stdcall   (CALLBACK,WINAPI)  


          Win32   API的调用协定,由被调用的函数清理堆栈,所有参数自右至    
          左入栈,生成的代码中函数名有一个_(下划线)作前缀一个@和参数总    
          字节数(十进制)作後缀。它不支持可变参数,但它产生的代码比    
          _cdecl的短,因为没有每次调用後的清理堆栈的代码。     

    
  VC有两种函数调用方式   一种是__stdcall,另一种是__cdecl  
  函数的调用方式有两种一种是PASCAL调用方式,另一种是C调用方式  
  使用PASCAL调用方式,函数在返回到调用者之前将参数从栈中删除  
  使用C调用方式,参数的删除是调用者完成的  
  WinMain函数是由系统调用的,Windows系统规定由系统调用的函数都遵守PASCAL调用方式  
  但是VC中函数的缺省调用方式是__cdecl,也就是C调用方式  
  所以在WinMain前显示的声明。  
  在Windows编程中将遇到很多声明修饰符,如CALLBACK,WINAPI,PASCAL这些在IntelCPU的计算机上都是__stdcall  
  详细的声明细节请看windef.h文件      

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值