Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : sergeev                              2:5020/400     15 Jul 2005  20:39:43
 To : Ilya Anfimov
 Subject : Re: Переменное число аргументов?
 -------------------------------------------------------------------------------- 
 
 Ilya Anfimov wrote:
 
 > 2005-07-14, sergeev <sergeev@sbor.spb.su> пишет:
 >>  
 >>>  s> Интересное заявление! А как быть с функциями printf< scanf и т.д.?
 >>>  s> Hужно использовать va_list (man va_arg)
 >>> 
 > 
 >  Цитирую беспардонно:
 > 
 >    va_arg
 >           The va_arg macro expands to an expression that has the type
 >           and value of the next argument in the call.
 > [skipped]
 > 
 >           If  there  is no next argument, or if type is not compatible
 >           with
 >           the type of the  actual  next  argument (as promoted according
 >           to the default argument promotions), random errors will occur.
 
 Молодец, прочитал-таки.
 Теперь привожу примеры обсуждаемого кода.
 1) До версии gcc-3.3 это выглядело бы так:
 ------------------
 #include <varargs.h>
 void func (va_alist)
 va_dcl
 {
     int N = 10, d;
     va_list ap;
     va_start (ap);
     if (d = va_arg (ap, int)) N = d;
     va_end (ap);
     printf ("N=%d\n", N);
 }
 
 int main ()
 {
  func ();
  func (100);
 }
 ------------------
 Как бы полное соответствие с пожеланиями.
 Hачиная с v 3.3 пришлось переходить на stdarg,
 где функция с переменным числом аргументов должна иметь хотя бы один.
 Пришлось ввести фиктивный.
 
 #include <stdarg.h>
 void func (char *c, ...)
 {
     int N = 10, d;
     va_list ap;
     va_start (ap, c);
     if (d = va_arg (ap, int)) N = d;
     va_end (ap);
     printf ("N=%d\n", N);
 }
 
 int main ()
 {
  func (NULL);
  func (NULL, 100);
 }
 Hадеюсь собрать тест самостоятельно сможете.
 
 > 
 >  Да ты вманопосылалку ещё не отрастил, а туда же.
 
 -- 
 Поиск истины способен изрядно позабавить.  Говард.
 Сергеев В. Сосновый Бор.
 --- ifmail v.2.15dev5.3
  * Origin: SBOR node, Sosnovy Bor, Russia (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Переменное число аргументов?   Evgenij M. Baldin   13 Jul 2005 19:30:45 
 Re: Переменное число аргументов?   Artem Chuprina   13 Jul 2005 20:00:29 
 Re: Переменное число аргументов?   sergeev   14 Jul 2005 19:36:04 
 Re: Переменное число аргументов?   Artem Chuprina   14 Jul 2005 21:08:25 
 Re: Переменное число аргументов?   sergeev   14 Jul 2005 21:44:46 
 Re: Переменное число аргументов?   Ilya Anfimov   14 Jul 2005 23:25:29 
 Re: Переменное число аргументов?   sergeev   15 Jul 2005 20:39:43 
 Re: Переменное число аргументов?   Ilya Anfimov   16 Jul 2005 17:51:22 
 Re: Переменное число аргументов?   Ilya Anfimov   16 Jul 2005 18:39:33 
 Переменное число аргументов?   Peter Irich   14 Jul 2005 21:49:55 
 Re: Переменное число аргументов?   Roman Belenov   15 Jul 2005 11:42:37 
Архивное /ru.linux/10347346711cc.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional