Страницы

Поиск по вопросам

суббота, 16 марта 2019 г.

Как сделать функцию с необязательным параметром в СИ

Имеется функция вида 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 $

Комментариев нет:

Отправить комментарий