Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
VeL
Зарегистрирован: 18.01.2006 Сообщения: 521 Откуда: Харьков
|
Добавлено: Пн Июн 28 2010 22:49 Заголовок сообщения: "Чистый" Си и колво необязательных аргументов |
|
|
Доброго времени суток господа.
Пишу функцию с переменным колличеством аргументов.
Дальше мне в цикле нужно перебрать все аргументы.
Как узнать их колличество, чтобы написать условие цикла?
Код: | void myFunc(char *myvar1, ...)
{
int valArg;
va_list aPtr;
va_start(aPtr, myvar1);
valArg = va_arg(aPtr, int);
} |
Дальше вызываем ее например так:
Код: | void main()
{
myFunc("This is myarg", 254, 12, "some1", 3654, "some2");
} |
Ну и потом мне эту строку нужно обработать
Слелать проверку if (aPtr == NULL) я тоже немогу, потму как это значение устанавливается в нуль только функцией va_end(aPtr)
Задачка вроде как практическая и часто используемая, а в литературе везде приводится пример, что в качестве одного из аргументов передается их колличество.
А как же например тогда работает printf которой мы не передаем колво аргументов? она же как то их сама считает
И можно ли чередовать необязательные аргументы разных типов? _________________ Best regards |
|
Вернуться к началу |
|
|
yw
Зарегистрирован: 21.10.2009 Сообщения: 15
|
Добавлено: Сб Июл 10 2010 00:50 Заголовок сообщения: |
|
|
> Задачка вроде как практическая и часто используемая, а в литературе везде приводится пример, что в качестве одного из аргументов передается их колличество.
Близко к истине . Кстати , обязателен хотя бы 1 фиксированный параметр . Завершение списка аргументов определяйте сами в этой функции , как хотите , не обязательно из фиксированных параметров ; язык здесь не помощник
> А как же например тогда работает printf которой мы не передаем колво аргументов? она же как то их сама считает
Да , сама считает число форматов преобразования (%....) . И если фактические аргументы не тех типов (или не в том количестве) -- получите кривое поведение (в лучшем случае сбой) при исполнении программы
> И можно ли чередовать необязательные аргументы разных типов?
Да , но сами придумайте , как будете определять эти типы . Например , сделайте в стиле 'printf' -- стандартно , понятно и есть заготовки в стандартной библиотеке |
|
Вернуться к началу |
|
|
alex1983-0112
Зарегистрирован: 22.08.2006 Сообщения: 46 Откуда: г. Семенов Нижегородская обл.
|
Добавлено: Чт Июл 22 2010 22:44 Заголовок сообщения: |
|
|
Клац _________________ #define TRUE FALSE// счастливой отладки |
|
Вернуться к началу |
|
|
|