[C/C++]可变参数传递

    在工做中遇到一种问题,须要在可变参函数中将可变参数传递给另外的函数调用,因而想固然的写了以下代码:
函数

void vTestFun_1(const char* fmt, ...)
{
    ...
    vTestFun_2(fmt, ...);
    ...
}

void vTestFun_2(const char* fmt, ...)
{
    //TODO
}

    而后就理所固然的囧了,编译器告诉我不能这么用,那只能找其余方法了。
code

    因而,新的代码以下:orm

void vTestFun_1(const char* fmt, va_list argp)
{
    //TODO
}

void vTestFun_2(const char* fmt, ...)
{
	va_list args;
	va_start(args, fmt);
	...
	vTestFun_1(fmt, args);
	...
	va_end(args);
}

    后来,看Log4cpp源码的时候,发现其中也有相似这样的函数调用:
编译器

void Category::_logUnconditionally(Priority::Value priority, 
                                   const char* format, 
                                   va_list arguments) throw() 
{
    _logUnconditionally2(priority, StringUtil::vform(format, arguments));
}

void Category::log(Priority::Value priority, const char* stringFormat, ...) throw() 
{ 
        if (isPriorityEnabled(priority)) 
        {
            va_list va;
            va_start(va, stringFormat);
            _logUnconditionally(priority, stringFormat, va);
            va_end(va);
        }
}

    综上,若想将可变参数进行传递,不能简单的使用...来进行传递,这种想固然的方法直接被编译器秒杀……一般先将可变参数...转为va_list,而后将va_list传递给其余函数进行处理,这样就变相实现了可变参数的传递。
源码

相关文章
相关标签/搜索