|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/19170c81fa494.html, оценка из 5, голосов 10
|