Имеется функция вида f(p1, *p2, *p3, *p4) { ... } По указателям p3 и p4 присваиваются определённые значения, которые не всегда нужны во внешней программе, т.е. эти аргументы, в отличие от p1 и p2, являются не обязательными. Как можно реализовать на Си, чтобы можно было использовать эту функцию без "возвращения" значений туда, на что указывают p3 и p4? Например, чтобы можно было использовать как f(a1, &a2), так и f(a1, &a2, a3, a4)
Ответ
@Ilyazh, если еще актуально, то вот пример такой функции (из рабочей программы в Linux)
static int
check_args_nz(void *a, ...) {
va_list ap;
va_start(ap, a);
int i;
for (i = 0; a; i++)
a = va_arg(ap, void *);
va_end(ap);
return i;
}
Для теста вызывать можно примерно так:
int a = 1;
char *b = "abc";
double c;
printf ("%d %d %d
",
check_args_nz(0, "2", &a, 0),
check_args_nz(&a, b, &b, &c, 0),
check_args_nz((void *)a, 0));
результат:
$ ./a.out
0 4 1
$
Комментариев нет:
Отправить комментарий