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,   ...))
  这个规则的入口。  
   
  而后面的函数是对这个函数初始化!

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值