C++ 利用va_list、va_start、va_arg、va_end编写可变参数函数

Home / C++ MrLee 2015-7-22 3271

在网上查了下资料,发现基本上都是转载的,而且基本上都是int的例子,我想弄char*字符串居然没有例子,然后自己用了始终是第一个字符串被抛弃了。于是研究了一下原因,原来是默认第一个就是可变参数的形参量。如下面例子
#define _END "_end" //定义一个结束符的宏
//申明的变量
void InitComBox(CComboBox* pBox, LPCTSTR sParam,...)
{
	pBox->AddString(sParam);//添加第一个
	va_list ap;
	va_start(ap,sParam);
	LPCTSTR _str = va_arg(ap,LPCTSTR);
	while(_str != _END)
	{
		pBox->AddString(_str);
		_str = va_arg(ap,LPCTSTR);
	}
	va_end(ap);
	pBox->SetCurSel(0);
}
//使用例子
InitComBox(&m_CombDebug,"关闭调试","简单调试","全面调试",_END);

另外一个简单例子
void std_vararg_func(const char *fmt, ... ) 
{ 
     va_list ap; 
     va_start(ap, fmt); 
     printf("%dn", va_arg(ap, int)); 
     printf("%fn", va_arg(ap, double)); 
     printf("%sn", va_arg(ap, char*)); 
     va_end(ap); 
} 
int main() 
{ 
     std_vararg_func("%d %f %sn", 4, 5.4, "hello world"); 
} 

输出: 4 5.400000 hello world
纪录下来!

QQ20150722191218

本文链接:https://www.it72.com/3729.htm

推荐阅读
最新回复 (0)
返回