Функция с переменным количеством параметров - 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
и выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д