随笔-34  评论-108  文章-0  trackbacks-0
    void error(int severity...)
{
   va_list ap;
   va_start(ap,severity);
   for(;;)
   {
      char* p=va_arg(ap,char*);
      if(p==0) break;
      cerr<<p<<' ';
   }
   va_end(ap);
   cerr<<'\n';
   if(severity) exit(severity);
}
    首先,通过调用va_start定义并初始化一个va_list,宏va_start以一个va_list的名字和函数的最后一个有名形参的名字作为参数。宏va_arg用户按顺序取出各个无名参数。在每次调用va_arg时,程序员都必须提供一个类型,va_arg假定这就是被传递的实际参数的类型,但一般说它并没有办法保证这一点。从一个使用过va_start的函数退出之前,必须调用一次va_end,这是因为va_start可能以某种形式修改了堆栈,这种修改可能导致返回无法完成,va_end能将有关的修改复原。
posted on 2007-01-25 08:39 探丫头 阅读(556) 评论(0)  编辑 收藏 引用 所属分类: 编程语言——C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理