创建函数foo(…)的C语法

创建函数foo(…)的C语法,c,linux,syntax,printf,C,Linux,Syntax,Printf,对于这个简单的问题,我很抱歉,但是我如何创建具有未定义数量的参数的C函数,例如 int printf ( const char * format, ... ). 我想创建一个函数,将其用作printk的包装器: void my_printk( const char * format, ...) { printk("my log:"); printk(format, ...); printk("\n"); } 谢谢很接近了。请看这里: 你很接近。请看这里: 必须先将参数

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

int printf ( const char * format, ... ).
我想创建一个函数,将其用作printk的包装器:

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

谢谢

很接近了。请看这里:


你很接近。请看这里:


必须先将参数转换为va_列表,然后才能将其传递给另一个函数。然后可以将其传递给函数的“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);
}

必须先将参数转换为va_列表,然后才能将其传递给另一个函数。然后可以将其传递给函数的“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);
}

printk是内核日志的函数-我在character device driverWell中使用它,您可以使用变量参数创建自己的函数,但如果您不能将它们传递给另一个函数,那么printk可能与AndreyT重复,它是一个打印消息的函数,在C编程语言中专门用于Linux内核。printk是内核日志的函数-我在character device driverWell中使用它,您可以使用变量参数创建自己的函数,但如果您不能将它们传递给另一个函数,那么printk可能与AndreyT重复,它是一个打印消息的函数,在C编程语言中专门用于Linux内核。