Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 |
|
Вернуться к началу |
|
 |
|