我想在一个函数中两次使用 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/