????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
探丫頭 閱讀(564)
評論(0) 編輯 收藏 引用 所屬分類:
編程語言——C++