quake3 code fragment [1]

   #define  QDECL __cdecl   
  
static     int    (QDECL    * syscall)(    int    arg,   ...   )    =    ( int    (QDECL    * )(    int ,   ...)) - 1 ;   
    
  
void    dllEntry(    int    (QDECL    * syscallptr)(    int    arg,...   )   )    {   
  syscall   
=   syscallptr;   
  }
 

  因为这个是变参申明、使用,所以用"__cdecl"。  
  这个是c的标准而且建立在640k的标准上的!  
  指明了一个函数调用方式为:传递的参数应该有调用着来释放,效率低!  
   
  现在一般用"__stdcall"。  
  这个是微软的标准!  
  方式为:传递的参数应该有自身释放,即在栈里释放,效率相对较高!  
   
  对于后面的  
  static int (QDECL *syscall)(int arg, ... ) =   (int (QDECL   *)(int, ...))-1;  
  申明了一个常量函数指针,并且给出了初值,表明指向一个固定的空间,这个空间的首地址是个遵循
 (int  (QDECL   *)(   int,   ...))
  这个规则的入口。  
   
  而后面的函数是对这个函数初始化!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值