因此,此函数显然应该返回最小浮点值,但它始终返回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;
}
float var_min(int z, float, ...)
至:
float var_min(int z, ...)
要将float
或double
参数传递给变量参数函数,它们必须显式为float
或double
类型;整数类型不会转换为浮点类型,因此:
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()
。