Доброго времени суток, уважаемые эксперты по Си. Допустим у меня есть прога: void proc(int num,...); main() { int a,b,c,d,e,f,g; proc(a,b,c,d,e,f,g); } void proc(int num,...) { } Дык вот, как в процедуре proc() получить значения всех параметров?
Добрый день, X-RayMan! Смотри в справке VALIST или VA_LIST (В разных сях - разные имена) Ответ отправлен: 07.12.2002, 17:30 Отправитель: Pinman Отвечает vitya
Доброе время суток, X-RayMan! для этого существуют макросы va_start - va_arg va_end и тип va_list для начала создаешь переменную va_list и инициализируешь следующим образом va_start(list, num); //последняя конкретная переменная после чего ты можешь обращаться к каждому следующему параметру через макрос va_arg. int i = va_arg(list, int); double d = va_arg(list, double); при этом макрос передвигает тебя автоматически на следующий параметр! закончив работу, надо вызвать va_end(list); для высвобождения ресурсов.
Ответ отправлен: 07.12.2002, 09:12 Отправитель: vitya Отвечает Jadd
Приветствую Вас, X-RayMan! все очень просто. Есть такая фишка, как va_list . Так вот, если вместо многоточия поставить va_list ap, то можно пользоваться этим списком дополнительных аргументов для работы функции. Кстати, это ANSII'шная фитча. Многие книги это описывают. Подробности в MSDN или хэлпе. Ответ отправлен: 09.12.2002, 03:09 Отправитель: Jadd Отвечает Avl2k
Добрый день, X-RayMan! Примерно так: #include #include void proc(int num,...) { va_list l; va_start(l, num); for(int i = 0; i < num; ++i) printf( "arg%d=%d
", i, va_arg(l, int)); va_end(l); } void main() { int a=10,b=20,c=30,d=40,e=50,f=60,g=70; proc(7, a,b,c,d,e,f,g); } С уважением, Avl2k. Ответ отправлен: 09.12.2002, 11:32 Отправитель: Avl2k Отвечает Andrew Vext
Приветствую Вас, X-RayMan! На моем сайте www.netlib.wallst.ru выложена книга Кернигана и Ритчи "Язык программирования Си". В ней подробно описана работа с такими функциями. Заходите и читайте. Ответ отправлен: 09.12.2002, 11:52 Отправитель: Andrew Vext
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.