所以我有两个函数都有相似的参数
void example(int a, int b, ...);
void exampleB(int b, ...);
现在 example
调用 exampleB
,但是如何在不修改的情况下传递变量参数列表中的变量 exampleB
(因为这也已在其他地方使用)。
原文由 Not Available 发布,翻译遵循 CC BY-SA 4.0 许可协议
所以我有两个函数都有相似的参数
void example(int a, int b, ...);
void exampleB(int b, ...);
现在 example
调用 exampleB
,但是如何在不修改的情况下传递变量参数列表中的变量 exampleB
(因为这也已在其他地方使用)。
原文由 Not Available 发布,翻译遵循 CC BY-SA 4.0 许可协议
它可能与此处描述的情况不完全相同,但如果您要为字符串格式函数(例如记录器)定义包装器:
void logger(const char *name, const char *format, ...);
void wrapper(const char *format, ...);
当您实现 wrapper
调用 logger
时,我们可以先使用 vasprintf 创建一个字符串,然后将其传递给 logger
。
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
static void wrapper(const char *format, ...)
{
char *string;
va_list args;
va_start(args, format);
// variadic printf with allocated string. must free()
vasprintf(&string, format, args);
logger("wrapper", "%s", string);
free(string);
va_end(args);
}
不是最干净的,但有效。当您必须避免使用 宏 函数时,请尝试此操作。
原文由 Jake Fetiu Kim 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答478 阅读✓ 已解决
你不能直接这样做;您必须创建一个采用
va_list
的函数: