【发布时间】:2017-06-10 20:17:11
【问题描述】:
好的,所以我正在编写一个日志服务,它将一些数据写入某个文件(假设文件的名称是 log)。
我要写入的数据类型不同,可能是 int 或 string 或其他。
到目前为止,这是我的函数的外观:
void write_log(FILE * fp, char * event, ...)
{
va_list list;
va_start(list, event);
// Cannot use va_arg(list, type_of_var) here!!!
}
我调用函数的方式可能因我的数据而异:
write_log(fp, "Memory size :", mem_size);
或者
write_log(fp, "Username :", username);
我不知道第三个参数是字符串还是 int 或其他。
我本可以使用va_arg(list, type_of_var),但由于我的数据类型任意变化,我无法使用它。
知道如何在不知道函数类型的情况下访问函数的第三个参数吗?
【问题讨论】:
-
你不能。为什么你认为像 printf 这样的函数需要格式字符串?
-
对我的功能有什么想法或解决方法吗?
-
一种解决方法:使用所需字段定义
struct,并将其传递给写入文件的函数。该函数从结构中读取相关数据并将它们写入您的日志。 -
@Dan 不幸的是,我目前仅限于 C。
-
This example of
_Generic是 C 解决方案的开始。主要思想是使用_Generic也传递一个值来指示如何处理 ... 参数。
标签: c arguments type-conversion