gpt4 book ai didi

c++ - 如何从可变参数列表中获取数据?

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:09 27 4
gpt4 key购买 nike

我有以下函数,只有一个可变参数列表(没有支持/固定参数)。是否可以获取传递给此函数的值?我使用的是 ANSI 格式。

Foo( ... )
{
}

为了清楚起见,再添加一些要点。在我的特殊情况下,参数的数量及其类型作为配置存储在 .xml 文件中,可以从 Foo() 访问。

编辑:

我正在添加一些来 self 的试验和错误的信息。我部分成功地从列表中获取数据,如下所示。

va_list Arguments;

Arguments = (( va_list ) &Arguments + Offset );

Data = va_arg( Arguments, Type );

我提出的想法是直接从堆栈中读取数据。这里的问题因素是 Offset,其值根据我传递给 Foo() 的参数数量而变化。例如,当我只传递一个指针时,我将它的值设置为 16 以获得正确的结果。我通过反复试验发现了这个值。我想从参数列表中派生 Offset,我的程序可以在所有可能的情况下运行而不会出现任何运行时故障。谁能告诉我这个Offset 和参数列表的关系。

我正在使用 Visual Studio 2008 进行开发。

最佳答案

现代 C 不支持没有固定参数的可变参数函数。但是,为了向后兼容,varargs.h 支持它们。 .另见 this man page ,它提供了以下示例代码。请注意可变参数所需的 K&R 风格的函数定义。

#include <varargs.h>
void foo(va_alist) va_dcl {
va_list ap;
va_start(ap);
while(...) {
...
x = va_arg(ap, type);
...
}
va_end(ap);
}

关于c++ - 如何从可变参数列表中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1538621/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com