Да, в C есть понятие функций с переменными числами, которое аналогично тому, как printf()
допускает переменное число аргументов.
Максимальная функция будет выглядеть примерно так:
#include <stdio.h>
#include <stdarg.h>
#include <limits.h>
static int myMax (int quant, ...) {
va_list vlst;
int i;
int num;
int max = INT_MIN;
va_start (vlst, quant);
for (i = 0; i < quant; i++) {
if (i == 0) {
max = va_arg (vlst, int);
} else {
num = va_arg (vlst, int);
if (num > max) {
max = num;
}
}
}
va_end (vlst);
return max;
}
int main (void) {
printf ("Maximum is %d\n", myMax (5, 97, 5, 22, 5, 6));
printf ("Maximum is %d\n", myMax (0));
return 0;
}
Это выводит:
Maximum is 97
Maximum is -2147483648
Обратите внимание на использование переменной quant
.Как правило, есть два способа указать конец ваших аргументов: либо счет спереди (5
), либо значение часового в конце.
Примером последнего будет список указателей,передавая NULL
как последний.Поскольку эта функция max
должна иметь возможность обрабатывать весь диапазон целых чисел, дозорное решение нежизнеспособно.
Функция printf
использует первый подход, но немного по-другому.У него нет определенного count , скорее он использует поля %
в строке формата для определения других аргументов.