воскресенье, 28 ноября 2010 г.

Функция с переменным количеством параметров

Hi!Для операционных систем для реализации синхронизации разных запросов,используется разные фишки: мьютексы,семафоры,событи и т.д. Я выбрал события,и для разных функций использовалось переменное количество переменных для синхронизации секций.И решать проблему не хочется Ctrl+c, Ctrl+v)Решил написать функцию с переменным количеством параметров:)

HANDLE * hmains(HANDLE handle,...)
{
va_list par; //лист с параметрами*
int count = -1; // количество переменных
int size; // вспомогательная переменная
HANDLE *cp = &handle; // Начало в памяти для всех переменных функции
va_start(par,handle); // присваиваем листу начало для переменных
while(cp = va_arg(par,HANDLE*)) // подсчёт количество переменных
count++;
size = count;
va_start(par,handle);
HANDLE *hmain = new HANDLE[count]; // Память под массив переменных
hmain[0] = handle; // Первая переменная в массиве
while(cp = va_arg(par,HANDLE *)) // Заполняем массив оставшимися переменными
{
if(size==1)
break;
hmain[count - size +1] = cp; // непосредственно заполнение
size--;
}
return hmain; // Возвращаем массив переменных
}

Конечно можно придраться к реализации или с умничать по каждой строчке,но статья для возможности показать вариант реализации,а уж каждый сможет его как хочет изменять и модифицировать)

1 комментарий:

  1. не помешали бы комментарии к каждой строчке кода, для чего она предназначена

    ОтветитьУдалить