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