天天看点

含有可变参数的函数(转)

<col>

​<code>​void va_start( ​</code>​

​<code>​   va_list arg_ptr ​</code>​

​<code>​);​</code>​

在ansi下,除了va_list作参数外,还需要把第一个可选参数之前的参数也传进去:

​<code>​   va_list arg_ptr, ​</code>​

​<code>​   prev_param ​</code>​

当取得了所有的参数并进行处理后,要用va_end()将指针设置为null,参数很简单,就是va_list:

​<code>​void va_end(    va_list arg_ptr );​</code>​

下面是一个带有可变参数的函数,用来模拟printf()函数。通过上面的两个函数就可以得到参数列表的指针了,接下来用vsprintf()函数把参数写进一个buffer中,然后把buffer输出出来,一切都搞定了。

​<code>​void simulateprintf(const char* pszformat, ...) {     char buf[1024];     va_list arglist;     va_start(arglist, pszformat);     vsprintf(buf, pszformat, arglist);     va_end(arglist);     cout&lt;&lt;buf&lt;&lt;endl; } int main(int argc, char* argv[]) {     simulateprintf("%d%s%d%d%s", 3, "hoho", 5, 65, "haha");     return exit_success; }​</code>​