Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

C: проблема с функциями вида void A(void *v, ...)

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
eX



Зарегистрирован: 14.10.2003
Сообщения: 1

СообщениеДобавлено: Вт Окт 14 2003 18:34    Заголовок сообщения: C: проблема с функциями вида void A(void *v, ...) Ответить с цитатой

Если кто знает - подскажите, пожалуйста, как в приведенной ниже функции узнать, был ли там на самом деле дополнительный параметр в этих трех точках при вызове функции или нет (интерфейс функции менять нельзя, язык - чистый С).

void A(void *v, ...)
{
va_list ap;
va_start(ap, v);
char *c = va_arg(ap, char *);
va_end(ap);

...
}

Заранее спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Вт Окт 14 2003 19:39    Заголовок сообщения: Насколько я знаю, это возможно сделать только используя один параметр для передачи числа остальных.(--) Ответить с цитатой

-
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Вт Окт 14 2003 19:50    Заголовок сообщения: Хотя это можно сделать и так: (+) Ответить с цитатой

Удобным свойством С++ является наличие предопределённых инициализаторов аргументов. Значения аргументов по умолчанию можно задать в объявлении функции, при этом они подставляются автоматически в вызов функции, содержащий меньшее число аргументов, чем объявлено. Например, следующая функция объявлена с тремя аргументами, два из которых инициализированы:

error (char* msg, int level = 0, int kill = 0);

Эта функция может быть вызвана с одним, двумя или тремя аргументами:

error ("Ошибка!"); // Вызывается error ("ошибка", 0, 0);
error ("Ошибка!", 1); // вызывается error ("ошибка", 1, 0);
error ("Ошибка!", 3, 1); // значения аргументов по умолчанию
// не используются.

P.S.
Взято из http://ad.cctpu.edu.ru/cpp/glava16_8.htm
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...