c++ - 是否可以在一个函数中使用两次 va_list 方法?

标签 c++ formatting

我想在一个函数中两次使用 va_list 方法。我可以这样做吗?

#include <cstdarg>

void printFDS(int num_fds, ... , const char *fmt, ...) {

    va_list fds, args;
    va_start(fds, num_fds);
    va_start(args, fmt);

    for (int i = 0; i < num_fds; i++) {
        vsprintf(va_arg(fds, FILE*), fmt, args);
    }
    va_end(args);
    va_end(fds);
}

所以我将能够像那样调用该函数:

printFDS(1, stderr, "Error: %s\n", stderror(errno));

或者 printFDS(2, stderr, otherFD, "Error: %s\n", stderror(errno));

while FILE *otherFD = fopen ("somefile", "w");

我的目的:在 fd 的列表上打印信息..

谢谢

最佳答案

那是不可能的,省略号(三个点)必须只有一次并且只能是最后一个。


如果你有一个支持 C++11 的编译器,你也许可以用 initializer list 来完成它和 std::vector 作为第一个参数:

void printFDS(const std::vector<FILE*>& files, const char* fmt, ...)
{
    // ...
}

你可以这样调用它

printFDS({ stderr, otherFilePointer }, "Error: %s\n", std::strerror(errno));

关于c++ - 是否可以在一个函数中使用两次 va_list 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15923210/

相关文章:

c++ - 谁能给我一个 operator= of vector in MSDN 的链接?

linux - 使用 *nix 中的 column 命令格式化列表

Eclipse 无法处理 CSS3 动画

c++ - 如何以表格形式输出

java - 将字符添加到字符串的更好方法(更优雅)

c++ - 如何明确让用户知道模板参数的要求?

C++ - 是否将 const 魔数(Magic Number)放入命名空间

c++ - 类实例的内存分配——应该使用继承来减少内存消耗吗?

cakephp - CakePHP 中的 TCPDF 奇怪问题

c++ - 如何在 Linux 上使用带有 EG20T 芯片组的英特尔凌动 Q7 模块上的 CAN 总线?