gpt4 book ai didi

C: 使用 stdarg.h 的可变参数列表

转载 作者:行者123 更新时间:2023-12-04 12:00:08 25 4
gpt4 key购买 nike

我正在试验可变参数列表并看到一些奇怪的结果...

我正在测试的代码是:

#include <stdio.h>
#include <stdarg.h>

void foo(int param1, int param2, ...)
{
int param3 = 0;

va_list ap;
va_start(ap, param2);
param3 = va_arg(ap, int);
va_end(ap);

printf("param3: %d\n", param3);
}


int main(void)
{
foo(1,1);
foo(1,1,42);

}

该片段的输出是:

param3: -1073748472
param3: 42

对于第二次调用:“foo(1,1,42)”,一切似乎都按预期工作。

对于第一次调用:'foo(1,1)',结果看起来像一个未初始化的 int,尽管我在函数开头第一次初始化它时确实将它设置为 0。

我希望能够依赖这样一个事实,即如果未调用参数,结果变量的值应为 0。我原以为 va_arg() 会足够明智地处理这个问题,但事实并非如此。

有什么建议可以解决这个问题吗?

非常感谢。

最佳答案

首先,我不明白您将 param3 初始化为零这一事实应该有什么关系,因为无论如何您稍后都会覆盖该值。

其次,尝试“提取”一个不存在的可变参数会产生未定义的行为。因此,处理该问题的唯一方法是尝试提取不存在的参数。没有办法检测参数是否存在。调用者有责任通知函数它可以安全地提取多少可变参数。

关于C: 使用 stdarg.h 的可变参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2978519/

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