在重复函数调用中使用省略号 (...)

0 c ellipsis

我想编写一个带有省略号参数的函数 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() 相同的省略号参数。

unw*_*ind 5

不可能,...参数不能直接传递。

您通常要做的是使用显式参数列表 ( ) 参数实现最低层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__来引用变量参数列表,但这在函数中不可用。

  • @PeterPolak这听起来有点像[费马](https://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem#Fermat's_conjecture)。 (2认同)