Чтобы использовать va_arg
, начиная со второго аргумента, измените:
float var_min(int z, float, ...)
на:
float var_min(int z, ...)
(Если после всегда будет хотя бы один аргумент с плавающей точкой z
, и вы sh включите его в список параметров, затем дадите ему имя, инициализируете min
напрямую и измените va_start(ap, z)
, чтобы использовать его имя вместо 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()
.