无法使用可变参数实现函数

Couldn't implement function with variable arguments

我试图用可变参数实现函数,但得到的是垃圾值,因为 output.I 在尝试实现我的 own.Could 之前参考了这个 article 谁能帮我解决这个问题代码,因为我无法理解这段代码中的错误。

/* va_arg example */
#include <stdio.h>      /* printf */
int FindMax (int n, ...)
{
    int i,val,largest,*p;
    p=&n;
    p+=sizeof(int);
    largest=*p;
    for (i=1;i<n-2;i++)
    {
        p+=sizeof(int);
        val=*p;
        largest=(largest>val)?largest:val;
    }
    return largest;
}
int main ()
{
    int m;
    m= FindMax (7,702,422,631,834,892,104,772);
    printf ("The largest value is: %d\n",m);
    return 0;
}

问题是您尝试直接访问堆栈中您假定 找到参数的位置。调用约定是机器特定的,有时是编译器特定的,并且是您 永远不能依赖的实现细节 ,因此您的参数可能在您假设的堆栈中找不到。就 C 而言,您的代码仅调用 未定义的行为

解决方案:使用 stdarg.h 访问参数,这就是它的作用。

#include <stdio.h>      /* printf */
#include <stdarg.h>

int FindMax (int n, ...)
{
    va_list ap;
    int i,val,largest;

    va_start(ap, n); // <- ap is the argument pointer, this initializes it
                     //    based on the last non-variadic argument.

    largest=0;
    while (n--)
    {
        val = va_arg(ap, int); // <- fetch argument and advance pointer
        largest=(largest>val)?largest:val;
    }
    va_end(ap); // done with argument pointer

    return largest;
}
int main ()
{
    int m;
    m= FindMax (7,702,422,631,834,892,104,772);
    printf ("The largest value is: %d\n",m);
    return 0;
}