Передавая переменное число аргументов
Можем ли мы передать переменное число аргументов функции в c?
5 ответов
Решение
Вот пример:
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
int maxof(int, ...) ;
void f(void);
int main(void){
f();
exit(EXIT SUCCESS);
}
int maxof(int n_args, ...){
register int i;
int max, a;
va_list ap;
va_start(ap, n_args);
max = va_arg(ap, int);
for(i = 2; i <= n_args; i++) {
if((a = va_arg(ap, int)) > max)
max = a;
}
va_end(ap);
return max;
}
void f(void) {
int i = 5;
int j[256];
j[42] = 24;
printf("%d\n", maxof(3, i, j[42], 0));
}
Если это функция, которая принимает переменное число аргументов, то да.
Убедитесь, что список аргументов переменной всегда должен быть в конце списка аргументов
пример: void func(float a, int b, ...)
верно
но void func(float a, ..., int b)
не является действительным
"Вам следует учитывать, что использование функций с переменными координатами (стиль C) является опасным недостатком", - говорит Стефан Роллан. Вы можете найти его полезный пост здесь.
Да, если функция принимает переменные аргументы. Если вам нужно создать собственную функцию с переменным аргументом, есть макросы, начинающиеся с va_, которые предоставляют вам доступ к аргументам.