Russian Qt Forum
Май 07, 2024, 01:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Аргумент функции типа va_list  (Прочитано 10418 раз)
serj_f
Гость
« : Май 19, 2004, 11:35 »

Есть ф-ция принимеющая один из  аргументов тип va_list :
void gtk_list_store_set_valist (GtkListStore *list_store, GtkTreeIter *iter, va_list var_args);
Как мне подготовить эту переменную (var_args) для использования этой ф-ции.

P.S. Это не вопрос по gtk т.к. ф-ция могла бы быть любой - мне важно подготовить эту переменную.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Май 19, 2004, 12:22 »

Я так думаю что эта используется для вызова из функций с большим количеством аргументов. Подготовить va_list тебе наверно не удастся.
Посмотри этот пример из MSDN может он поможет.

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 );
}
Записан
Anonymous
Гость
« Ответ #2 : Май 19, 2004, 12:38 »

Цитата: "Admin"
Я так думаю что эта используется для вызова из функций с большим количеством аргументов. Подготовить va_list тебе наверно не удастся.
Посмотри этот пример из MSDN может он поможет.

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 );
}


Ага. Похоже что эту ф-цию(gtk_list_store_set_valist) можно вызывать только из ф-ции с переменным числом аргументов:-(
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Май 19, 2004, 12:45 »

ага я как раз об этом
Записан
serj_f
Гость
« Ответ #4 : Май 19, 2004, 14:48 »

А вот еще вопрос.
Например есть ф-ция func_1(arg1, ...) и у меня есть массив со строками char **arr причем заранее неизвестно сколько там строк. Можно ли передать эти строки с массива arr в ф-цию func_1()? Может макрос какой есть?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #5 : Май 19, 2004, 15:33 »

передаешь в функцию указатель char **arr  и его размеры

примерно так

func(arr,3,4)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 22.