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


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Ilya Anfimov                         2:5020/400     16 Jul 2005  17:51:22
 To : sergeev
 Subject : Re: Переменное число аргументов?
 -------------------------------------------------------------------------------- 
 
 >
 
 From: Ilya Anfimov <ilan@astelecom.ru>
 
 2005-07-15, sergeev <sergeev@sbor.spb.su> пишет:
 
 > 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.
 > Молодец, прочитал-таки.
 > Теперь привожу примеры обсуждаемого кода.
 
  Тебе  в  копилку знаний: этих примеров в манах нет. Так что чего
 ты тут выпендривался два письма подряд, изображая что твои  мысли
 описаны в манах, мне не совсем понятно.
 
 [та же жопа, только устаревшая skipped]
 
 > ------------------
 > Как бы полное соответствие с пожеланиями.
 > 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;
 
  Афигеть. Дайте две.
  Hапрячь   чуть-чуть   извилину  и  подумать:  а  что  будет  при
 func(NULL,0) -- это  наверное  работа   не   для   человека,  уже
 выучившего фразу <<смотри man>>?
 
 >     va_end (ap);
 >     printf ("N=%d\n", N);
 > }
 >
 > int main ()
 > {
 >  func (NULL);
 >  func (NULL, 100);
 > }
 > Hадеюсь собрать тест самостоятельно сможете.
 
  Интересно,    а   почему   Вы   не   удосужились   собрать   его
 самостоятельно? Вот я уже не прошу прикинуть --  а  почему  такую
 полезную  вещь  не  задокументировали как расширение или например
 посмотреть в код, а почему это работает и что для этого требуется.
  Просто  взять  и  собрать свой собственный тестовый
 пример, ну там чтобы посмотреть на наличие опечаток хотя бы.
 
  Hint: с современными gcc и ld.so  даже  он  работать  не  будет.
 Почему  --  оставляю  выяснить  самостоятельно.   Вдруг  ума  Вам
 прибавит.
 --- ifmail v.2.15dev5.3
  * Origin: Demos online service (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/19170c81fa494.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional