我想编写一个带有省略号参数的函数 writelog() ,它应该将相同的省略号参数转发给另一个函数。怎么做?
我的函数示例:
void writetolog(char *format, ...)
{
FILE *file;
if ((file = fopen(LOG_FILE, "a")) != NULL)
{
fprintf(file, format, ...);
fclose(file);
}
}
Run Code Online (Sandbox Code Playgroud)
函数 fprintf() 应该具有与函数 writetolog() 相同的省略号参数。
不可能,...参数不能直接传递。
您通常要做的是使用显式参数列表 ( ) 参数实现最低层va_list,并以这种方式解决它。
在您的情况下,如果最低层是标准库的打印,那么您需要使用保存函数参数的vfprintf()显式调用:va_list
void writetolog(const char *format, ...)
{
FILE * const file = fopen(LOG_FILE, "a");
if (file != NULL)
{
va_list args;
va_start(args, format);
vfprintf(file, format, args);
va_end(args);
fclose(file);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,在 C 宏中,您可以使用特殊符号__VA_ARGS__来引用变量参数列表,但这在函数中不可用。
| 归档时间: |
|
| 查看次数: |
551 次 |
| 最近记录: |