Функция с переменным количеством параметров - 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 и выводится на экран.

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


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

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

6   голосов , оценка 4 из 5
Похожие ответы