相关疑难解决方法(0)

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

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

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

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

[更新:基于迄今为止提供的答案,似乎存在一些混淆.用另一种方式表达问题:通常,你可以包装一些任意的可变参数函数而不修改该函数的定义.

c variadic

176
推荐指数
6
解决办法
6万
查看次数

这有什么意义:*(void**)(&fptr)= dlsym(handle,"my_function");`

代码来自此页面:http://pubs.opengroup.org/onlinepubs/009695399/functions/dlsym.html

你能帮我理解一下吗?它接受函数指针的地址,将其转换为void**然后取消引用它.我不知道为什么它必须像这样工作.

我感谢您的帮助!到目前为止,我所得到的唯一建议是"从右到左阅读"或类似"从右到左阅读".

c

2
推荐指数
1
解决办法
1044
查看次数

标签 统计

c ×2

variadic ×1