Функция с переменным количеством параметров - C (СИ)
Формулировка задачи:
Почему выводит всякую ерунду
#include <stdio.h>
#include "stdio.h"
#include "stdlib.h"
int sumf(int n, ...);
int main()
{
printf("%d", sumf(5,5,5,5,5));
return 0;
}
int sumf(int n, ...)
{
int *p = &n;
int sum = 0;
while (*p!=0)
{
sum += (*p);
p++;
}
return sum;
}Решение задачи: «Функция с переменным количеством параметров»
textual
Листинг программы
#include <stdarg.h>
#include <stdio.h>
#include "p99/p99_args.h"
int P99_FSYMB(add)(P99_VA_ARGS(number)) {
int result = 0;
va_list arglist;
va_start(arglist, number);
for (size_t i = 0; i < number; i++) {
result += va_arg(arglist, int);
}
va_end(arglist);
return result;
}
#define add(...) P99_FSYMB(add)(P99_LENGTH_VA_ARG(__VA_ARGS__))
int main() {
int s = add(2, 7, 1, 8, 2, 8);
printf("%d\n", s);
}
Объяснение кода листинга программы
В данном коде определена функция с именем add, которая принимает переменное количество аргументов.
Также в коде присутствует макрос add, который вызывает функцию add с количеством аргументов, равным количеству элементов в списке аргументов, переданных в add.
В функции main создается список аргументов, который передается в функцию add с помощью макрос add. Результат работы функции add сохраняется в переменной s и выводится на экран.