c - 在 C 中转发可变参数函数的调用

标签 c variadic

在 C 中,是否可以转发可变参数函数的调用?如,

int my_printf(char *fmt, ...) {
    fprintf(stderr, "Calling printf with fmt %s", fmt);
    return SOMEHOW_INVOKE_LIBC_PRINTF;
}

在这种情况下,以上述方式转发调用显然不是绝对必要的(因为您可以用其他方式记录调用,或使用 vfprintf),但我正在处理的代码库需要包装器做一些实际工作,并且没有(也不能添加)类似于 vfprintf 的辅助函数。

[更新:根据目前提供的答案,似乎有些困惑。用另一种方式来表达这个问题:一般来说,你能包装一些任意的可变函数而不修改该函数的定义。]

最佳答案

如果您没有类似于 vfprintf 的函数这需要 va_list而不是可变数量的参数,你做不到。参见 http://c-faq.com/varargs/handoff.html .

例子:

void myfun(const char *fmt, va_list argp) {
    vfprintf(stderr, fmt, argp);
}

关于c - 在 C 中转发可变参数函数的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32156758/

相关文章:

c - 被 K&R 练习 1.5.2 难住了

c++ - C++ 中的可变参数方法和递归

c++ - 具有可变模板参数的函数指针

syntax - 如何在后续 block 中访问 va_list

C++ 多变参数模板未绑定(bind)到函数参数

c - 给定一些指令实现一个简单的自旋锁

c - 在 C 中激活数字的某些位

c - 我是 C 的新手,在使用模数时遇到问题

c - 如何在printf中获取字符串的基地址?这个o/p的原因是什么?

rust - 是否可以为由所有实现特征的类型组成的任何元组自动实现特征?