C语法创建函数foo(...)

时间:2011-04-10 17:21:22

标签: c linux syntax printf

很抱歉这个简单的问题,但我怎么能创建具有未定义参数数量的C函数,例如

int printf ( const char * format, ... ).

我想创建函数以将其用作printk的包装器:

void my_printk( const char * format, ...)
{
    printk("my log:");
    printk(format, ...);
    printk("\n");
}

由于

2 个答案:

答案 0 :(得分:5)

您必须先将args转换为va_list,然后才能将其传递给其他函数。然后你可以将它传递给函数的'v'版本。

所以你可以这样做:

void my_printk( const char * format, ...)
{
    va_list ap;
    va_start(ap, format);
    printk("my log:");
    vprintk(format, ap);
    printk("\n");
    va_end(ap);
}

大多数情况下,这样的任何功能都会提供'v'版本,你的也应该提供:

void my_vprintk( const char * format, va_list ap)
{
    printk("my log:");
    vprintk(format, ap);
    printk("\n");
}

void my_printk( const char * format, ...)
{
    va_list ap;
    va_start(ap, format);
    my_vprintk(format, ap);
    va_end(ap);
}

答案 1 :(得分:0)

你很亲密。看看这里:http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html

int f(int, ... );

int f(int, ... ) {
        .
        .
        .
}

int g() {
        f(1,2,3);
}