Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

534
01 марта 2006 года
HarryAxe
448 / / 19.01.2006
Недавно возникла необходимость написать функцию в ellipsis notation, т. е. когда количество передаваемых в неё параметров и их тип заранее неизвестны. Примером могут послужить функции типа wsprintf() или макроса TRACE(). Подобные функции описываются как
int Proc(LPTSTR tsz, ...);
А вот как работать с каждым из таких параметров я не знаю. Можно ассемблер использовать, это понятно, но мне желательно работать с параметрами именно в C++ нотации. Буду благодарен за любую помощь
1.8K
01 марта 2006 года
_const_
229 / / 26.11.2003
Цитата:
Originally posted by HarryAxe
Недавно возникла необходимость написать функцию в ellipsis notation, т. е. когда количество передаваемых в неё параметров и их тип заранее неизвестны. Примером могут послужить функции типа wsprintf() или макроса TRACE(). Подобные функции описываются как
int Proc(LPTSTR tsz, ...);
А вот как работать с каждым из таких параметров я не знаю. Можно ассемблер использовать, это понятно, но мне желательно работать с параметрами именно в C++ нотации. Буду благодарен за любую помощь


Код:
/* Returns the average of a variable list of integers. */
#ifdef ANSI             /* ANSI compatible version    */
int average( int first, ... )
{
   int count = 0, sum = 0, i = first;
   va_list marker;

   va_start( marker, first );     /* Initialize variable arguments. */
   while( i != -1 )
   {
      sum += i;
      count++;
      i = va_arg( marker, int);
   }
   va_end( marker );              /* Reset variable arguments.      */
   return( sum ? (sum / count) : 0 );
}
#else       /* UNIX compatible version must use old-style definition.  */
int average( va_alist )
va_dcl
{
   int i, count, sum;
   va_list marker;

   va_start( marker );            /* Initialize variable arguments. */
   for( sum = count = 0; (i = va_arg( marker, int)) != -1; count++ )
      sum += i;
   va_end( marker );              /* Reset variable arguments.      */
   return( sum ? (sum / count) : 0 );
}
#endif


Подробности см. MSDN va_arg etc
534
01 марта 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by _const_
Подробности см. MSDN va_arg etc


Хм.. Прикольно! В принципе, то, что надо. ОГРОМНОЕ СПАСИБО!!!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог