函数仅使第一个可变参数参数值正确

问题描述 投票:0回答:1

因此,此函数显然应该返回最小浮点值,但它始终返回0。在调试时,我发现va_arg()函数仅正确获得31,然后得到一些奇怪的数字,其中每一个为0 。

float var_min(int, float, ...);
void main()
{
    cout << var_min(7, 31, 12, 4.5, 9, 22, 69, 8.21);
}

float var_min(int z, float, ...)
{
    int i = 0;
    float min, p;
    va_list ap;
    va_start(ap, z);
    min = va_arg(ap, float);
    for (i = 1; i < z; i++)
    {
        p = va_arg(ap, float);
        min = (min < p) ? min : p;
    }
    va_end(ap);
    return min;
}
c++ variadic-functions
1个回答
0
投票
float var_min(int z, float, ...)

至:

float var_min(int z, ...)

要将floatdouble参数传递给变量参数函数,它们必须显式为floatdouble类型;整数类型不会转换为浮点类型,因此:

var_min(7, 31, 12, 4.5, 9, 22, 69, 8.21);

应该是:

var_min(7, 31., 12., 4.5, 9., 22., 69., 8.21);

在可变参数中,float参数被提升为double,因此,va_arg(ap, float)在出现的两个地方都应该为va_arg(ap, double),而float min, p;应该为double min, p;

void main()不是main的标准声明。可能是int main()
© www.soinside.com 2019 - 2024. All rights reserved.