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

1 c linux syntax printf

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

int printf ( const char * format, ... ).
Run Code Online (Sandbox Code Playgroud)

我想创建函数来使用它作为printk的包装器:

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

谢谢

Ran*_*832 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);
}
Run Code Online (Sandbox Code Playgroud)

大多数时候,任何这样的函数都会提供'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);
}
Run Code Online (Sandbox Code Playgroud)