Russian Qt Forum

Программирование => С/C++ => Тема начата: serj_f от Май 19, 2004, 11:35



Название: Аргумент функции типа va_list
Отправлено: 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 т.к. ф-ция могла бы быть любой - мне важно подготовить эту переменную.


Название: Аргумент функции типа va_list
Отправлено: Admin от Май 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 );
}


Название: Аргумент функции типа va_list
Отправлено: Anonymous от Май 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) можно вызывать только из ф-ции с переменным числом аргументов:-(


Название: Аргумент функции типа va_list
Отправлено: Admin от Май 19, 2004, 12:45
ага я как раз об этом


Название: Аргумент функции типа va_list
Отправлено: serj_f от Май 19, 2004, 14:48
А вот еще вопрос.
Например есть ф-ция func_1(arg1, ...) и у меня есть массив со строками char **arr причем заранее неизвестно сколько там строк. Можно ли передать эти строки с массива arr в ф-цию func_1()? Может макрос какой есть?


Название: Аргумент функции типа va_list
Отправлено: Admin от Май 19, 2004, 15:33
передаешь в функцию указатель char **arr  и его размеры

примерно так

func(arr,3,4)