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

标签 c linux syntax printf

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

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

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

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

谢谢

最佳答案

您必须先将 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);
}

关于创建函数 foo(...) 的 C 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5613436/

相关文章:

c - 阅读和删除电子邮件

c# - 如何以编程方式获取有关 Linux 中存储驱动器的信息? (C#单声道)

linux - 在 _interactive_ docker 启动之前,docker 容器似乎有失败的/etc/hosts

c - 我的字符串没有进入它的 if 语句?

javascript - JavaScript 可以处理 C 结构吗?

C sprintf覆盖?

linux - 使用 Readline 在 bash 中注释掉命令行

Ruby - 语句中不正确的换行符仍然会给出结果吗?

objective-c - 使用 block 对象而不是选择器?

加入多列的 SQL 查询