если вы удалите! = 0.0, ваша программа выполняет грязное чтение, пока не прочитает нулевой блок памяти.
у вас есть два варианта:
- укажите, сколько аргументов вы передаете, т.е. avg (3, 4.3, 2.0, 3.0);
- укажите терминатор или страж, то есть среднее (4.3, 2.0, 3.0, 0.0);
EDIT
ради любопытства я попытался облегчить необходимость в явном терминаторе, используя
макросы variadic:
#define avg(v1, v2, ...) _avg((v1), (v2), __VA_ARGS__, 0.0)
double _avg(double v1,double v2,...)
{
/* same code, just prefixing function name with _ */
берегитесь:
avg(3.0, 3.0, 0.0, 100.0, 100.0)
возвращает 3.0, так как вы преждевременно завершаете va_list. Вы можете попробовать использовать другое "странное" значение часового ...