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

How to use va_arg to modify the value of a variadic parameter(如何使用va_arg修改可变参数的值)

本文介绍了如何使用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, %d
", 1, 2, 3, 4);
}

由于va_arg返回右值,因此内容不能修改。如何修改变量参数的内容?

预期产量:101、102、103、104

谢谢!

推荐答案

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, %d
", 1, 2, 3, 4);
}

输出:

101, 102, 103, 104

这篇关于如何使用va_arg修改可变参数的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何使用va_arg修改可变参数的值