[C] Funkcja o zmiennej liczbie parametrów bez podawnaia ich ilości.

0

Czy da się napisać funkcję average w taki sposób aby nie podawać w ogóle ilości prakazywanych parametrów(pominąć num), tylko same pararmetry?

#include <stdio.h>
#include <stdarg.h>

double average(int num,...) {

   va_list valist;
   double sum = 0.0;
   int i;

   /* initialize valist for num number of arguments */
   va_start(valist, num);

   /* access all the arguments assigned to valist */
   for (i = 0; i < num; i++) {
      sum += va_arg(valist, int);
   }
	
   /* clean memory reserved for valist */
   va_end(valist);

   return sum/num;
}

int main() {
   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
   printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
}

Tak aby wywołanie funkcji było następujące:

 printf("Average of 2, 3, 4, 5 = %f\n", average(2,3,4,5));
 printf("Average of 5, 10, 15 = %f\n", average(5,10,15));

Ja chcę przekazywać do mojej funkcji 2 enumy na początku i 1, 2, lub 3 inty, ale podawanie ich ilości mi się nie pododba.

0

AFAIK nie, w jakiś sposób trzeba tę informację podać: http://stackoverflow.com/a/4421702

0

Dać się da, tylko trzeba wtedy zadbać o element wskazujący koniec danych (jakis terminator).

0

C++11 twoim zbawcą

template<class T> double avg(std::initializer_list<T> values)
{
    static_assert(std::is_arithmetic<T>::value, "Must be arithmetic type");
    return std::accumulate(values.begin(), values.end(), 0.0) / values.size();
}

https://wandbox.org/permlink/57XQfuPHKLDlfhWL

W C można się posłużyć NAN jako terminatorem tyle, że jest problem jak zdefiniować taką stałą (w standardowej bibliotece tego nie ma).

1 użytkowników online, w tym zalogowanych: 0, gości: 1