带三点省略号的参数调用

本文探讨了C++中的不定参数函数,如`catch(...)`和`printf()`,并介绍了`arg_list`模板类来处理不定参数。通过示例展示了如何使用`va_list`进行参数恢复和计算平均值。同时,提到了在Windows API中`__cdecl`和`__stdcall`调用约定的区别,以及在实际应用中的安全注意事项,如防止缓冲区溢出。
摘要由CSDN通过智能技术生成

常见的有catch(...)和  int   printf(const   char*,...);前者容易理解,省略号代表其他所有情况,后者吗..?
其实本质上应该都是 不定参数函数.它的调用方式是_cedel,也就是说由被调用都恢复堆栈。原理如下:
template   <class   FT,class   MT=FT>  
  class   arg_list{  
  public:  
  arg_list(FT   &ft):_ft(&ft),_count(0){va_start(_val,*_ft);}  
  MT   next(){_count++;return   va_arg(_val,MT);}  
  void   end(){va_end(_val);}  
  int   count(){return   _count;}  
  private:  
  FT*   _ft;  
  va_list   _val;  
  int   _count;  
  };  
  int   average(int   p,...){  
  int   sum=0,int   i=p,count=0;  
  arg_list<int>   arg(p);  
  while(i!=END_ARG)  
  sum+=i,i=arg.next();  
  arg.end();  
  return   sum/arg.count();  
  }   
  应用实例:
void Msg(TCHAR *szFormat, ...);
void Msg(TCHAR *szFormat, ...)
{
    TCHAR szBuffer[10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值