Функция с переменным количеством параметров - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Почему выводит всякую ерунду
Листинг программы
  1. #include <stdio.h>
  2. #include "stdio.h"
  3. #include "stdlib.h"
  4. int sumf(int n, ...);
  5. int main()
  6. {
  7. printf("%d", sumf(5,5,5,5,5));
  8. return 0;
  9. }
  10. int sumf(int n, ...)
  11. {
  12. int *p = &n;
  13. int sum = 0;
  14. while (*p!=0)
  15. {
  16. sum += (*p);
  17. p++;
  18. }
  19. return sum;
  20. }

Решение задачи: «Функция с переменным количеством параметров»

textual
Листинг программы
  1. #include <stdarg.h>
  2. #include <stdio.h>
  3. #include "p99/p99_args.h"
  4.  
  5. int P99_FSYMB(add)(P99_VA_ARGS(number)) {
  6.     int result = 0;
  7.     va_list arglist;
  8.     va_start(arglist, number);
  9.     for (size_t i = 0; i < number; i++) {
  10.         result += va_arg(arglist, int);
  11.     }
  12.     va_end(arglist);
  13.     return result;
  14. }
  15.  
  16. #define add(...) P99_FSYMB(add)(P99_LENGTH_VA_ARG(__VA_ARGS__))
  17.  
  18. int main() {
  19.     int s = add(2, 7, 1, 8, 2, 8);
  20.     printf("%d\n", s);
  21. }

Объяснение кода листинга программы

В данном коде определена функция с именем add, которая принимает переменное количество аргументов. Также в коде присутствует макрос add, который вызывает функцию add с количеством аргументов, равным количеству элементов в списке аргументов, переданных в add. В функции main создается список аргументов, который передается в функцию add с помощью макрос add. Результат работы функции add сохраняется в переменной s и выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы