创建函数foo(…)的C语法
对于这个简单的问题,我很抱歉,但是我如何创建具有未定义数量的参数的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"); } 谢谢很接近了。请看这里: 你很接近。请看这里: 必须先将参数
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内核。