Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 143
от 10.12.2002, 18:00

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 429
Отправлено ответов: 936
Активность: 218.1 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Pinman
Статус: Доверительный
Общий рейтинг: 147.87
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.13
[Подробней >>]
Jadd
Статус: Профессиональный
Общий рейтинг: 142.65
[Подробней >>]
 
Avl2k
Статус: Доверительный
Общий рейтинг: 126.14
[Подробней >>]
Andrew Vext
Статус: Доверительный
Общий рейтинг: 108.7
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 414. Доброго времени суток, уважаемые эксперты по Си. Допустим у меня есть прога: void proc(int num,...);... (ответов: 5)

Вопросов: 1, ответов: 5


 Вопрос № 414

Доброго времени суток, уважаемые эксперты по Си.
Допустим у меня есть прога:
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() получить значения всех параметров?



Вопрос отправлен: 06.12.2002, 19:48
Отправитель: X-RayMan (x_rayman@vinnitsa.com)

[Следующий вопрос >>] [Список вопросов]

Отвечает Pinman

Добрый день, 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.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (40)
C / C++ (29)
Perl (6)
Delphi (21)
Pascal (23)
Basic / VBA (9)
Java / JavaScript (11)
PHP (6)
MySQL / MSSQL (8)
Пользователю
Windows 95/98/Me (32)
Windows NT/2000/XP (23)
"Железо" (30)
Поиск информации (14)
Администратору
Windows NT/2000/XP (13)
Linux / Unix (16)
Юристу
Гражданское право (10)
Семейное право (3)
Трудовое право (6)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное