很抱歉这个简单的问题,但我怎么能创建具有未定义参数数量的C函数,例如
int printf ( const char * format, ... ).
我想创建函数以将其用作printk的包装器:
void my_printk( const char * format, ...)
{
printk("my log:");
printk(format, ...);
printk("\n");
}
由于
答案 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); }