如何使用va_arg修改变参数的值


#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
void tag_log(const char *format, ...) {
va_list ap;
va_start(ap, format);
for (int i = 0; i < 4; i++) {
va_arg(ap, int) += 100; // is wrong?
}
va_end(ap);
va_start(ap, format);
vprintf(format, ap);
va_end(ap);
}
int main() {
tag_log("%d, %d, %d, %dn", 1, 2, 3, 4);
}

由于va_arg返回一个右值,因此无法修改内容。如何修改变量参数的内容?

预期输出:101102103104

谢谢!!!

va_arg(ap, int) = 100; // is wrong?

是的,这是错误的。va_arg返回一个右值(不可赋值(。

我建议制作一个可变模板。

#include <cstdio>
#include <utility>
template<class... Args>
void tag_log(const char *format, Args&&... args) {
((args += 100), ...); // fold expression
std::printf(format, std::forward<Args>(args)...);
}
int main() {
tag_log("%d, %d, %d, %dn", 1, 2, 3, 4);
}

输出:

101, 102, 103, 104

相关内容

  • 没有找到相关文章

最新更新